我正在使用ADO.NET实体框架创建一个应用程序.
我可以在调试时逐行浏览我的代码,并为每个执行的查询观察SQL Server Profiler,但我无法弄清楚所有这些SQL命令的来源!
有时当我执行时SaveChanges()
,实体框架执行意外的,奇怪的INSERTS.他们有时会破坏申请.我无法弄清楚我正在做些什么来引起他们.
如何监视排队等待SaveChanges()
呼叫的挂起更改?
由于Entity Framework 5.0 DbContext
具有包含所有挂起更改的ChangeTracker
属性.类似于ObjectStateManager
您可以获得各种状态的实体,如下所示:
myDbContext.ChangeTracker.Entries().Where(e => e.State == EntityState.Added); myDbContext.ChangeTracker.Entries().Where(e => e.State == EntityState.Deleted); myDbContext.ChangeTracker.Entries().Where(e => e.State == EntityState.Modified);
看一眼
myObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added)
在这里.
要监视在状态管理器中添加或删除实体时的事件,可以使用ObjectStateManagerChanged事件:
var ctx = new ModelContainer(); // ... ctx.ObjectStateManager.ObjectStateManagerChanged += (sender, e) => { Trace.WriteLine(string.Format("{0}, {1}", e.Action, e.Element)); };