DBContext的Changetracker问题
-
25-10-2019 - |
题
我有一个基于CodeFirst EF-4.1的程序。用户获得上下文并可以修改某些属性。用户完成后,我会快速进行
ChangeTracker.Entries().Any(e => e.State != EntityState.Unchanged);
确定是否是 SaveChanges()
是否需要。如果我进行“ Savechanges()”调用,则所做的更改将持续到数据库中。
这适用于某些属性,对其他属性不起作用。具体而言,它似乎与简单类型一起使用(float
S),并带有集合层次结构(ObservableCollection
S)。
难道我做错了什么?
解决方案
是的,这是一个问题。某些关系没有跟踪 DbChangeTracker
. 。有区别 独立协会和外国密钥协会. 。在以下情况下,跟踪关系的变化。
- 一对一的关系,这始终是EFV4+中的外国密钥协会
- 与外国密钥协会一对一的关系 - 您应该设置外国密钥财产
在以下情况下,没有跟踪关系的变化。
- 与独立协会一对一的关系
- 始终是独立协会的多一关系
没有跟踪独立关联是不正确的命名。这些更改是跟踪的,但是 DbChangeTracker
不会暴露对这些更改的访问呢您必须转换 DbContext
至 ObjectContext
并使用 ObjectStateManager
访问 ObjectStateEntries
代表独立协会。
在这种情况下,最简单的事情就是调用 SaveChanges
总是。如果不需要保存数据,它将不会执行任何DB命令。
不隶属于 StackOverflow