多对多的关系检测变化

Gor*_*ran 5 entity-framework entity-framework-4 ef-code-first

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

this.Configuration.ValidateOnSaveEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
this.Configuration.LazyLoadingEnabled = false;
Run Code Online (Sandbox Code Playgroud)

这是测试代码:

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);
Run Code Online (Sandbox Code Playgroud)

如果我检查更改,它不报告任何:

// returns false
_context.ChangeTracker.Entries().Any(e => e.State == EntityState.Added || e.State == EntityState.Modified || e.State == EntityState.Deleted);
Run Code Online (Sandbox Code Playgroud)

如果我保存更改,则更改会正确更新到数据库.

// 1 record added to BookAuthors table
_context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

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

Lad*_*nka 5

DbContext没有跟踪更改,因为ChangeTracker没有包含所有信息.它只能为您提供实体状态,但不能为您提供独立关联状态(即多对多状态和一对多关系状态).如果你想获得许多一对多关系的国家必须获得ObjectContext并要求ObjectStateManager在通过@马克Oreta提供的链接描述.