entity-framework - 多对多关系检测变化

标签 entity-framework entity-framework-4 ef-code-first

我试图理解为什么 DbContext 没有检测到多对多关系的变化。这是我在模型配置中设置的:

this.Configuration.ValidateOnSaveEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
this.Configuration.LazyLoadingEnabled = false;

这是测试代码:
var book = Context.Set<Book>().Where(b => b.Id == 1).Single();
var author = Context.Set<Author>().Where(a => a.Id == 2).Single();

book.Authors.Add(author);

如果我检查更改,它不会报告任何:
// returns false
_context.ChangeTracker.Entries().Any(e => e.State == EntityState.Added || e.State == EntityState.Modified || e.State == EntityState.Deleted);

如果我保存更改,更改将正确更新到数据库。
// 1 record added to BookAuthors table
_context.SaveChanges();

为什么 DbContext 不跟踪多对多的变化?不涉及WCF,这个是直接连接Sql server。

最佳答案

DbContext未跟踪更改,因为 ChangeTracker不保存所有信息。它只能给你实体状态而不是独立关联状态(即多对多和一些一对多关系的状态)。如果你想得到多对多关系的状态,你必须得到 ObjectContext并询问 ObjectStateManager如@Mark Oreta 提供的链接中所述。

关于entity-framework - 多对多关系检测变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12699892/

相关文章:

asp.net - 从我的模型类中捕获异常的最佳方法

c# - 使用 Entity Framework 进行级联插入

c# - 使用带有日期时间和 bool 值的自动映射器来表示 POCO 中的半天

entity-framework - 使用 Entity Framework ,如何在多对多关系中向映射表添加记录

entity-framework - 使用 Entity Framework ExecuteStoreQuery返回数据表

c# - 如何使用动态 Linq 来创建 Exists

c# - Entity Framework 6 : The server was not found or was not accessible

c# - Entity Framework 6 代码优先 : How to seed data with a 'circular' relationship and store-generated columns?

c# - 在 EF4.1 代码中,如何覆盖 Web.config 中的 ConnectionString 名称

entity-framework - EF 代码优先并初始化多个上下文