我试图理解为什么 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服务器。
DbContext
不跟踪更改,因为ChangeTracker
不保存所有信息。它只能为您提供实体的状态,但不能提供独立关联的状态(即多对多和一些一对多关系的状态)。如果你想获得多对多关系的状态,你必须获得ObjectContext
并询问ObjectStateManager
如@Mark Oreta 提供的链接中所述。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)