EntityFramework 5 - 访问DbContext.ChangeTracker.Entries时出现InvalidOperationException

时间:2014-04-15 07:09:03

标签: c# entity-framework entity-framework-5 invalidoperationexception change-tracking

在我的DbContext实现中,如果有一个名为" IsModified"的方法。应用程序使用它来显示某种" Dirty"州。在方法中,我访问DbContext的ChangeTracker,如下所示。

如果我在从数据库加载/实现数据时访问ChangeTracker.Entries,我会收到InvalidOperationException,因为内部stateentry集合已更改。

有没有办法在不使用try / catch的情况下解决这个问题。或者是否有更有效的方法来跟踪上下文的修改状态?

public bool IsModified()
{
    return this.ChangeTracker.Entries().Any(e => e.State != EntityState.Unchanged);
}

1 个答案:

答案 0 :(得分:0)

将您的DbContext转换为ObjectContext并尝试执行IsModified

var context = new YourDbContext();
var adapter = (IObjectContextAdapter)context;
var objectContext = adapter.ObjectContext;
...

public bool IsModified()
{
    bool modified = 
    context.ObjectStateManager.GetObjectStateEntries(~EntityState.Unchanged);
                               .Any();
    return modified;
}

您还可以尝试处理context.ObjectStateManager.ObjectStateManagerChanged事件并在此活动中更新您的媒体资源。应该更优雅。