0

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

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并确定该实体是我获取的实体,还是新实体。

4

1 回答 1

1

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

var objectStateManager = context.ObjectStateManager;

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

更新

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

于 2013-01-23T23:29:56.910 回答