更新已分离实体的相关实体

时间:2012-11-01 16:59:24

标签: asp.net-mvc entity-framework entity-framework-5

我遇到了一个问题更新一个有多个相关实体的实体。我有一个非常简单的模型,它包含一个文章实体和一篇文章可以与之相关的类别列表。您可以从复选框列表中选择与其关联的哪些类别......哪种方法正常。

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

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

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

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

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

        return this.Commit();
    }

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

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

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

而不是......

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

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

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