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

时间:2013-01-23 23:23:43

标签: c# linq linq-to-sql

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

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并确定该实体是否是我获取的实体,或者它是否为新实体。

1 个答案:

答案 0 :(得分:1)

您可以使用对象状态管理器来测试对象上下文是否知道特定实体。

var objectStateManager = context.ObjectStateManager;

ObjectStateEntry temp;
var result = objectStateManager.TryGetObjectStateEntry(myEntity, out temp);

更新

上面的代码适用于Entity Framework,但问题涉及LINQ to SQL。您可以尝试检查ChangeSet返回的DataContext.GetChangeSet()。它包含三个添加,删除和更新实体的列表。

相关问题