多对多的关系检测变化

时间:2012-10-02 23:25:25

标签: 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服务器的直接连接。

1 个答案:

答案 0 :(得分:5)

DbContext未跟踪更改,因为ChangeTracker未包含所有信息。它只能为您提供实体状态,但不能为您提供独立关联状态(即多对多状态和一对多关系状态)。如果你想获得多对多关系的状态,你必须得到ObjectContext并按照@Mark Oreta提供的链接中的说明ObjectStateManager