我有一个包含集合的分离对象。我正在使用此代码附加它
EntityEntry dbEntityEntry = _context.Entry<T>(entity);
dbEntityEntry.State = EntityState.Modified;
如果我更改大部分字段,分离对象会完美保存..问题在于此对象具有的集合。集合的更改不会保留。我已经看到执行的查询,它onl触及“主”表。所有依赖关系都不会更新
有没有办法更新分离对象的整个树?
答案 0 :(得分:3)
问题:
EF不知道已更改的collection
或navigation properties
。通过将dbEntityEntry
的状态设置为EntityState.Modified
,EF只知道对象{{ 1}}已被更改。这意味着EF只会更新dbEntityEntry
,而不会更新dbEntityEntry
。
解决方案:
您可以迭代当前navigation properties
的所有collection (or navigation properties)
,并将实体状态设置为dbEntityEntry
。
另一种解决方案:也请看一下。可以帮到你。
答案 1 :(得分:0)
我可以建议我在某个框架中找到的方式。因为实体更新存在许多问题,所以如果使用ASP。在更新之前,只需调用此方法
protected virtual void AttachIfNot(TEntity entity)
{
if (!_dbSet.Local.Contains(entity))
{
_dbSet.Attach(entity);
}
}
对于导航属性,只需在集合中迭代即可。