我有一个基于Codefirst EF-4.1的程序。用户获取上下文并可以修改某些属性。用户完成后,我会快速执行
ChangeTracker.Entries().Any(e => e.State != EntityState.Unchanged);
确定是否需要SaveChanges()
。如果我执行'SaveChanges()'调用,则所做的更改将持久保存到数据库中。
这适用于某些属性,不适用于其他属性。具体来说,它似乎适用于简单类型(float
s)和集合层次结构(ObservableCollection
s)。
我做错了吗?
答案 0 :(得分:5)
是的,这是一个问题。 DbChangeTracker
不跟踪某些关系。 Independent association and Foreign key association之间存在差异。在以下情况下跟踪对关系的更改:
以下情况不会跟踪对关系的更改:
未跟踪独立关联的命名不正确。跟踪了这些更改,但DbChangeTracker
does not expose access to these changes!您必须将DbContext
转换为ObjectContext
并使用ObjectStateManager
访问代表独立协会的ObjectStateEntries
。
在这种情况下,最简单的事情就是始终致电SaveChanges
。如果不需要保存数据,它将不会执行任何数据库命令。