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