实体框架5 - DbContext有变化吗?

时间:2012-08-17 20:15:14

标签: entity-framework entity-framework-4.1

我正在尝试找到一种方法来确定对数据库上下文(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”,即使我知道上下文已被更改的事实。有没有人对我做错了什么有任何想法?

2 个答案:

答案 0 :(得分:43)

您应该使用DbContext的{​​{1}}:

ChangeTracker

答案 1 :(得分:31)

我知道当您使用Entity Framework 5时,这个答案对您没有帮助。但它可能对其他人有所帮助。

从Entity Framework 6开始,您只需按照以下代码行检查更改:

context.ChangeTracker.HasChanges()