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

本文关键字:Invali Entries ChangeTracker 访问 DbContext EntityFramework | 更新日期: 2023-09-27 17:58:17

在我的DbContext实现中,如果有一个名为"IsModified"的方法。这是应用程序用来显示某种"脏"状态的。在方法中,我访问DbContext的ChangeTracker,如下所示。

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

有没有一种方法可以绕过这一点,而不只是使用try/catch。或者,是否有更有效的方法来跟踪上下文的修改状态?

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

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

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事件并在此事件中更新您的属性。应该更优雅。