我正在尝试找到一种方法来确定对数据库上下文(DbContext)所做的任何更改。注意:我在Windows 7,64位框中使用Visual Studio 2012和Entity Framework 5。
当我以前使用ObjectContext而不是DbContext时,我可以做类似的事情:
public partial class MyObjectContext
{
public Boolean HasUnsavedChanges()
{
return (this.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Deleted).Any());
}
}
现在我正在使用DbContext,我试图这样做:
public partial class MyDbContext
{
public ObjectContext ObjectContext()
{
return (this as IObjectContextAdapter).ObjectContext;
}
public Boolean HasUnsavedChanges()
{
return (this.ObjectContext().ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Deleted).Any());
}
}
我遇到的问题是方法“HasUnsavedChanges()”总是返回“false”,即使我知道上下文已被更改的事实。有没有人对我做错了什么有任何想法?
答案 0 :(得分:43)
您应该使用DbContext
的{{1}}:
ChangeTracker
答案 1 :(得分:31)
我知道当您使用Entity Framework 5时,这个答案对您没有帮助。但它可能对其他人有所帮助。
context.ChangeTracker.HasChanges()