例如,假设我正在创建或获取一些稍后计划插入、更新或丢弃的实体:
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
并确定该实体是我获取的实体,还是新实体。
您可以使用对象状态管理器来测试对象上下文是否识别特定实体。
var objectStateManager = context.ObjectStateManager;
ObjectStateEntry temp;
var result = objectStateManager.TryGetObjectStateEntry(myEntity, out temp);
更新
上面的代码适用于实体框架,但问题涉及 LINQ to SQL。您可以尝试检查 DataContext.GetChangeSet()
返回的ChangeSet
。它包含三个用于添加、删除和更新实体的列表。