我希望能够判断实体框架上下文中是否存在任何未保存的数据。我已经弄清楚如何使用ObjectStateManager来检查现有实体的状态,但是我有两个问题。
我在msdn搜索中无法找到答案,所以我希望有人能在这里找到答案。
提前致谢。
答案 0 :(得分:15)
var addedStateEntries = Context
.ObjectStateManager
.GetObjectStateEntries(EntityState.Added);
答案 1 :(得分:8)
通过扩展方法(对于每个ObjectContext):
internal static class ObjectContextExtensions
{
public static bool IsContextDirty(this ObjectContext objectContext)
{
return objectContext
.ObjectStateManager
.GetObjectStateEntries(
EntityState.Added |
EntityState.Deleted |
EntityState.Modified).Any();
}
}
或通过部分方法(仅适用于您的ObjectContext):
partial class MyModel
{
public bool IsContextDirty()
{
return ObjectStateManager
.GetObjectStateEntries(
EntityState.Added |
EntityState.Deleted |
EntityState.Modified).Any();
}
}
答案 2 :(得分:6)
获取可重用单个方法/属性的简单方法是,您可以通过创建分部类并添加如下属性来向ObjectContext添加新方法:
public partial class MyEntityContext
{
public bool IsContextDirty
{
get
{
var items = ObjectStateManager.GetObjectStateEntries(EntityState.Added);
if(items.Any())
return true;
items = ObjectStateManager.GetObjectStateEntries(EntityState.Deleted);
if (items.Any())
return true;
items = ObjectStateManager.GetObjectStateEntries(EntityState.Modified);
if(items.Any())
return true;
return false;
}
}
}
根据您的搜索内容,您可以公开其他属性以了解是否只删除或修改。这种方法可以简化,但我希望清楚你需要做什么。
答案 3 :(得分:3)
本文准确描述了在实体框架中执行更改跟踪所需的内容:
Identity Resolution, State Management, and Change Tracking (Entity Framework) - MSDN