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

ChangeTracker.Entries().Any(e => e.State != EntityState.Unchanged);

确定是否是 SaveChanges() 是否需要。如果我进行“ Savechanges()”调用,则所做的更改将持续到数据库中。

这适用于某些属性,对其他属性不起作用。具体而言,它似乎与简单类型一起使用(floatS),并带有集合层次结构(ObservableCollectionS)。

难道我做错了什么?

有帮助吗?

解决方案

是的,这是一个问题。某些关系没有跟踪 DbChangeTracker. 。有区别 独立协会和外国密钥协会. 。在以下情况下,跟踪关系的变化。

  • 一对一的关系,这始终是EFV4+中的外国密钥协会
  • 与外国密钥协会一对一的关系 - 您应该设置外国密钥财产

在以下情况下,没有跟踪关系的变化。

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

没有跟踪独立关联是不正确的命名。这些更改是跟踪的,但是 DbChangeTracker 不会暴露对这些更改的访问呢您必须转换 DbContextObjectContext 并使用 ObjectStateManager 访问 ObjectStateEntries 代表独立协会。

在这种情况下,最简单的事情就是调用 SaveChanges 总是。如果不需要保存数据,它将不会执行任何DB命令。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top