【问题标题】:"An entity object cannot be referenced by multiple instances of IEntityChangeTracker" when saving related entity保存相关实体时,“一个实体对象不能被多个 IEntityChangeTracker 实例引用”
【发布时间】:2014-10-06 04:57:43
【问题描述】:

我有 2 个控制器和存储库、礼物和注册表。礼物可以有一个注册表,当我尝试创建一个新礼物时,我收到错误“一个实体对象不能被多个 IEntityChangeTracker 实例引用。”

礼物具有以下属性:

public class Gift
{
    public int GiftId { get; set; }

    public string Name { get; set; }

    public Registry Registry { get; set; }
}

我添加礼物的代码如下:

在控制器中:

    private IGiftRepository _giftRepository;
    private IAccountRepository _accountRepository;

    public GiftController()
    {
        this._giftRepository = new GiftRepository(new ApplicationDbContext());
        this._accountRepository = new AccountRepository(new ApplicationDbContext());
    }

    public GiftController(IGiftRepository giftRepository)
    {
        this._giftRepository = giftRepository;
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Create(Gift gift)
    {
        if (ModelState.IsValid)
        {
            Registry registry = _accountRepository.GetLoggedInRegistry(User.Identity.GetUserId());

            gift.Registry = registry;

            await _giftRepository.AddGiftAsync(gift);

            return RedirectToAction("Home", "Admin");
        }

        return View(gift);
    }

这是存储库中的代码:

    public async Task<bool> AddGiftAsync(Gift gift)
    {
        try
        {
            _context.Gifts.Add(gift);
            await _context.SaveChangesAsync();
        }
        catch (Exception)
        {
            return false;
        }

        return true;
    }

在 _content.Gifts.Add(gift) 我收到以下错误:“一个实体对象不能被多个 IEntityChangeTracker 实例引用。”我意识到这是由于我配置上下文的方式,但我不确定我需要进行哪些更改才能使其正常工作。

【问题讨论】:

    标签: c# asp.net asp.net-mvc entity-framework


    【解决方案1】:

    尝试像这样初始化存储库:

     public GiftController()
     {
         var context = new ApplicationDbContext();
         this._giftRepository = new GiftRepository(context);
         this._accountRepository = new AccountRepository(context);
     }
    

    【讨论】:

      猜你喜欢
      • 2011-11-01
      • 2011-10-12
      • 1970-01-01
      相关资源
      最近更新 更多