2

我正在使用EF4,并且在调试时,我想查看即将对数据库所做的更改。例如,如果我添加一些新的实体,比如联系人,我想查看在执行.SaveChanges()时将添加的联系人列表。同样,如果删除会发生,很高兴看到要删除的内容。如何查看实体集和未提交的更改?

在VS2010中有没有可视化工具或类似的工具?

谢谢!

回答

2

这是不可见的直接。最好的地方是检查ObjectStateManager其中包含每个实体和独立关联的状态条目。代表实体的每个ObjectStateEntry都有Entity属性填充。

编辑:

,如果你想在代码中访问这些数据,前者的描述是非常有用的。如果您只是想在调试器中看到它,请将context.ObjectStateManager添加到监视窗口并导航到非公共成员。您将看到字段:

  • _addedEntityStore
  • _deletedEntityStore
  • _modifiedEntityStore
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(); 

之后,你可以aggr egate这个字符串,并显示MessageBox或通知用户,就像你在你的应用程序中做的那样(例如输出到一些文本框,比如'Output')

+1

你可以把它放在一行中)它仍然可读:D – 2012-10-03 14:57:46

相关问题