我正在使用EF4,并且在调试时,我想查看即将对数据库所做的更改。例如,如果我添加一些新的实体,比如联系人,我想查看在执行.SaveChanges()时将添加的联系人列表。同样,如果删除会发生,很高兴看到要删除的内容。如何查看实体集和未提交的更改?
在VS2010中有没有可视化工具或类似的工具?
谢谢!
我正在使用EF4,并且在调试时,我想查看即将对数据库所做的更改。例如,如果我添加一些新的实体,比如联系人,我想查看在执行.SaveChanges()时将添加的联系人列表。同样,如果删除会发生,很高兴看到要删除的内容。如何查看实体集和未提交的更改?
在VS2010中有没有可视化工具或类似的工具?
谢谢!
这是不可见的直接。最好的地方是检查ObjectStateManager
其中包含每个实体和独立关联的状态条目。代表实体的每个ObjectStateEntry
都有Entity
属性填充。
编辑:
,如果你想在代码中访问这些数据,前者的描述是非常有用的。如果您只是想在调试器中看到它,请将context.ObjectStateManager
添加到监视窗口并导航到非公共成员。您将看到字段:
_addedEntityStore
_deletedEntityStore
_modifiedEntityStore
我使用此代码通知挂起的更改,这可能是有用的(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')
你可以把它放在一行中)它仍然可读:D – 2012-10-03 14:57:46