当前位置:  开发笔记 > 编程语言 > 正文

如何查看实体框架的待定更改?

如何解决《如何查看实体框架的待定更改?》经验,为你挑选了3个好方法。

我正在使用ADO.NET实体框架创建一个应用程序.

我可以在调试时逐行浏览我的代码,并为每个执行的查询观察SQL Server Profiler,但我无法弄清楚所有这些SQL命令的来源!

有时当我执行时SaveChanges(),实体框架执行意外的,奇怪的INSERTS.他们有时会破坏申请.我无法弄清楚我正在做些什么来引起他们.

如何监视排队等待SaveChanges()呼叫的挂起更改?



1> kjbartel..:

由于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);


谢谢,看起来这是EF5 +的唯一正确答案
我似乎无法在立即Windows中访问它!我得到[这个错误](http://imgur.com/a/2CsQn).

2> Richard..:

看一眼

myObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added)

在这里.


如果您正在使用DbContext对象,则需要先将其强制转换为IObjectContextAdapter,然后才能访问ObjectStateManager.例如:((IObjectContextAdapter)的DbContext).ObjectContext.ObjectStateManager

3> maximpa..:

要监视在状态管理器中添加或删除实体时的事件,可以使用ObjectStateManagerChanged事件:

var ctx = new ModelContainer();

// ...

ctx.ObjectStateManager.ObjectStateManagerChanged += (sender, e) =>
{
   Trace.WriteLine(string.Format("{0}, {1}", e.Action, e.Element));
};

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有