2012-04-02 8 views
3

ObjectContext.SaveChanges()がトランザクション内で発生するため、SaveChanges()をデータベースに書き込む前にObjectContextですべてのクエリ/更新を最初に実行することをお勧めします。 。データベースに保存せずにObjectContext内のすべての変更を反映

しかし、これは、オブジェクトを作成して部分的にクエリすると、存在することを拒否することを意味します(データベースがまだ更新されていないため)。私はSaveOptionsのいくつかでこれを回避することができると思ったが、それは私のようには見えない。

私は基本的にObjectContextがすべてを一度にコミットしたいと思うように私が変更できるプロキシのように振る舞いたいと思う。私はこれを達成する方法はありますか?

答えて

6

変更を保存しないと、新しいオブジェクトがデータベースに存在せず、データベースに対してクエリが実行されません(=エンティティクエリに対するLinqなし)。コンテキストに追加されたオブジェクトを取得ではなく、まだあなたがObjectStateManager問い合わせる必要があります保存するには、次の

キーと値のリストを考える:私は似たような状況では、これらの線に沿って何かをしなければならなかった

var data = context.ObjectStateManager 
        .GetObjectStateEntries(EntityState.Added) 
        .Where(e => !e.IsRelationship) 
        .Select(e => e.Entity) 
        .OfType<YourEntityType>(); 
0

をいくつかのキーは新しく、キーと値を1つのSaveChangesに更新/挿入したい場合は、最初にすべての既存のキーをプルダウンしてからを別ののコレクションkeysIncludingNewOnesのままにしておきます。新たに作成されたキーも追加されます。

次に、値と関連付けるキーオブジェクトを検索しているときに、コンテキストを照会するのではなく、keysIncludingNewOnesを参照します。コンテキストが新しいキーについてわからないのでSaveChanges

あなたの「保留中の追加」オブジェクトについて覚えておくのは比較的簡単です。それがあなたのものでなければ、それは一般的にそれ自身の問題を生み出す余りにも長生きの文脈を持つかもしれません。

関連する問題