0

我在更新具有多个相关实体的实体时遇到问题。我有一个非常简单的模型,它由一个文章实体和一个与文章相关的类别列表组成。您可以从复选框列表中选择与这些类别中的哪些相关联......这很好用。

当我实际使用 dbContext更新现有实体时,问题就出现了。当我更新这个实体时,我已经将它从上下文中分离出来,准备稍后重新附加它,以便更新可以正确执行。

我可以看到,在发布模型后,类别被添加到文章实体中就好了,看起来它在存储库中更新,没有发生错误。

当我查看数据库时,文章已正常更新,但类别没有。

这是我的(简化的)更新代码...

    public virtual bool Attach(T entity)
    {
        _dbContext.Entry(entity).State = EntityState.Modified;
        _dbSet.Attach(entity);

        return this.Commit();
    }

任何帮助都感激不尽。

4

1 回答 1

0

好的,我明白我现在做错了什么。我正在使用以下内容从上下文中选择实体以在它击中控制器操作之前进行模型绑定。

T entity = _dbSet.Find(id);    
_dbContext.Entry(T).State = EntityState.Detached;
return entity;

代替...

return _dbSet.AsNoTracking().FirstOrDefault(predicate);

通过分离实体,不会加载任何导航属性,因此无法对它们进行任何更改。使用 AsNoTracking() 仍会加载导航属性,但也允许附加实体对象以进行更新。

希望这可以帮助处于类似情况的其他人。

于 2012-11-02T10:59:02.100 回答