如何确定当前数据上下文中是否存在实体



例如,假设我正在创建或获取一些稍后计划插入、更新或丢弃的实体:

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。它包含三个用于添加、删除和更新实体的列表。

相关内容

  • 没有找到相关文章

最新更新