DbContext的ChangeTracker问题

Gle*_*eno 0 code-first entity-framework-4.1

我有一个基于Codefirst EF-4.1的程序.用户获取上下文并可以修改某些属性.用户完成后,我会快速完成

ChangeTracker.Entries().Any(e => e.State != EntityState.Unchanged);
Run Code Online (Sandbox Code Playgroud)

确定是否SaveChanges()需要a .如果我执行"SaveChanges()"调用,则所做的更改将持久保存到数据库中.

这适用于某些属性,不适用于其他属性.具体来说,它似乎适用于简单类型float和集合层次结构ObservableCollection.

难道我做错了什么?

Lad*_*nka 5

是的,这是一个问题.有些关系没有被跟踪DbChangeTracker.独立协会和外键协会之间存在差异.在以下情况下跟踪对关系的更改:

  • 一对一关系,它始终是EFv4 +中的外键关联
  • 与外键关联的一对多关系 - 您应该设置外键属性

如果出现以下情况,则不会跟踪对关系的更改:

  • 与独立关联的一对多关系
  • 多对多关系始终是独立关联

没有跟踪独立关联是不正确的命名.跟踪这些更改但DbChangeTracker 不公开对这些更改的访问!您必须转换DbContextObjectContext并使用它ObjectStateManager来访问ObjectStateEntries代表独立的关联.

在这种情况下,最简单的事情就是SaveChanges始终打电话.如果不需要保存数据,它将不会执行任何数据库命令.