例如,假设我正在创建或获取一些我后来计划插入,更新或丢弃的实体:
foreach (var foo in foos) {
if (foo.condition)
_myEntityCollection.Add(new Some_Entity_Type());
else
_myEntityCollection.Add(dc.Some_Entity_Types
.Where(t => t.ID == someID).FirstOrDefault());
}
当谈到恢复时,我可能会这样做:
// Exception gets thrown here if entity didn't exist in data context
_myEntityCollection.ForEach(t => dc.Refresh(RefreshMode.OverwriteCurrentValues, t));
我希望能够遍历_myEntityCollection
并确定该实体是否是我获取的实体,或者它是否为新实体。
答案 0 :(得分:1)
您可以使用对象状态管理器来测试对象上下文是否知道特定实体。
var objectStateManager = context.ObjectStateManager;
ObjectStateEntry temp;
var result = objectStateManager.TryGetObjectStateEntry(myEntity, out temp);
更新
上面的代码适用于Entity Framework,但问题涉及LINQ to SQL。您可以尝试检查ChangeSet
返回的DataContext.GetChangeSet()
。它包含三个添加,删除和更新实体的列表。