我遇到了一个问题更新一个有多个相关实体的实体。我有一个非常简单的模型,它包含一个文章实体和一篇文章可以与之相关的类别列表。您可以从复选框列表中选择与其关联的哪些类别......哪种方法正常。
当我实际使用dbContext 更新现有实体时,问题就出现了。当我更新这个实体时,我已经将它从上下文中分离出来,准备稍后重新附加它,以便更新可以正确执行。
我可以看到,在发布模型后,类别正在被添加到文章实体中,看起来它在存储库中更新而没有发生错误。
当我查看数据库时,文章已正常更新,但类别没有。
这是我的(简化)更新代码......
public virtual bool Attach(T entity)
{
_dbContext.Entry(entity).State = EntityState.Modified;
_dbSet.Attach(entity);
return this.Commit();
}
非常感谢任何帮助。
答案 0 :(得分:0)
好的,我明白我现在做错了什么。在使用控制器操作之前,我使用以下内容从上下文中选择实体以模型绑定。
T entity = _dbSet.Find(id);
_dbContext.Entry(T).State = EntityState.Detached;
return entity;
而不是......
return _dbSet.AsNoTracking().FirstOrDefault(predicate);
通过分离实体,不会加载任何导航属性,因此不能对它们进行任何更改。使用AsNoTracking()仍会加载导航属性,但也允许附加实体对象以进行更新。
希望这可以帮助处于类似情况的其他人。