在我的DbContext实现中,如果有一个名为" IsModified"的方法。应用程序使用它来显示某种" Dirty"州。在方法中,我访问DbContext的ChangeTracker,如下所示。
如果我在从数据库加载/实现数据时访问ChangeTracker.Entries,我会收到InvalidOperationException,因为内部stateentry集合已更改。
有没有办法在不使用try / catch的情况下解决这个问题。或者是否有更有效的方法来跟踪上下文的修改状态?
public bool IsModified()
{
return this.ChangeTracker.Entries().Any(e => e.State != EntityState.Unchanged);
}
答案 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
事件并在此活动中更新您的媒体资源。应该更优雅。