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);

アップデート

上記のコードは Entity Framework で機能しますが、問題は LINQ to SQL に関するものです。ChangeSetによって返されたを調べてみることができDataContext.GetChangeSet()ます。追加、削除、および更新されたエンティティの 3 つのリストが含まれています。

于 2013-01-23T23:29:56.910 に答える