实体框架5 - DbContext有变化? [英] Entity Framework 5 - DbContext Has Changes?

查看:93
本文介绍了实体框架5 - DbContext有变化?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试找到一种方法来确定对数据库上下文(DbContext)做出的任何更改。注意:我在Windows 7,64位方框上使用Visual Studio 2012与实体框架5。

I'm trying to find a way to determine of any changes have been made to a database context (DbContext). Note: I'm using Visual Studio 2012 with Entity Framework 5 on a Windows 7, 64-bit box.

当我以前使用ObjectContext而不是DbContext时,可以这样做:

Back when I used to use ObjectContext instead of DbContext, I could do something like:

public partial class MyObjectContext
{
    public Boolean HasUnsavedChanges()
    {
        return (this.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Deleted).Any());
    }
}

现在我使用DbContext,我试图这样做:

Now that I'm using DbContext, I tried to do this:

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,即使我知道上下文已被更改的事实。有没有人对我做错了什么想法?

The problem that I'm having is that the method "HasUnsavedChanges()" always return "false" even when I know for a fact that the context has been changed. Does anyone have any ideas as to what I'm doing wrong?

推荐答案

你应该使用 DbContext ChangeTracker

 public bool HasUnsavedChanges()
 {
    return this.ChangeTracker.Entries().Any(e => e.State == EntityState.Added
                                              || e.State == EntityState.Modified
                                              || e.State == EntityState.Deleted);
 }

这篇关于实体框架5 - DbContext有变化?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆