我正在使用EF4,在调试时,我想看看将对数据库进行哪些更改。例如,如果我添加一堆新实体,比如联系人,我想查看.SaveChanges()执行时将添加的联系人列表。同样,如果删除将会发生,那么很高兴看到将删除的内容。
VS2010中是否有可视化工具或类似工具可以执行此操作?
谢谢!
答案 0 :(得分:2)
直接看不到。最好的地方是检查ObjectStateManager
,其中包含每个实体和独立关联的状态条目。每个ObjectStateEntry
代表实体都填充了Entity
属性。
编辑:
如果要在代码中访问这些数据,前一种描述很有用。如果您只是想在调试器中看到它,请将context.ObjectStateManager
添加到监视窗口并导航到非公共成员。您将看到以下字段:
_addedEntityStore
_deletedEntityStore
_modifiedEntityStore
答案 1 :(得分:2)
我使用此代码通知挂起的更改,它可能很有用(context
是ModelContext的变量):
var changes = new[] { EntityState.Added, EntityState.Deleted, EntityState.Modified }
.SelectMany(state => context.ObjectStateManager.GetObjectStateEntries(state)
.Select(entry => new
{
NewState = state.ToString(),
EntitySetName = entry.EntitySet.Name,
Object = ((entry.Entity == null) ? "<n/a>" : entry.Entity.ToString()),
IsRelation = entry.EntitySet.Name.StartsWith("FK_"),
}))
.OrderBy(x => x.IsRelation ? 1 : 0)
.Select(x => string.Format("{0} ({1}): {2}", x.NewState, x.EntitySetName, x.Object))
.ToArray();
之后,您可以聚合此字符串并显示MessageBox或通知用户,就像在App中一样(例如输出到某些文本框,如“输出”)