2011-06-21 6 views
31

は、次のコードを考えてみましょう:Products_AgainはそれがmyContext.SaveChanges()で、コンテキストを保存せずに照会されていることを、ここでなぜEntity Frameworkのクエリ保存されていないエンティティを返しません

var Products_First = (from Entities.Product p in myContext.Product 
         select p); 

Entities.Product newProduct = new Entities.Product(); 
newProduct.Name = "New Product"; 
myContext.Products.AddObject(newProduct); 

var Products_Again = (from Entities.Product p in myContext.Product 
         select p); 

通知は呼び出されません。

Products_Againは、Products_Firstと同数の製品を含んでいます。どうしてこれなの?新しいProductが追加され、同じコンテキストオブジェクトによって追跡されます。新しいクエリ結果で新製品が表示されないのはなぜですか?

コンテキストに新しいオブジェクトを追加した後、変更を保存せずに新しいオブジェクトに到達する方法はありますか? myContext.ProductのようなタイプObjectQuery<T>

答えて

33

プロパティ、常にクエリDB。それが彼らの行いなのです。

EF 4.1では、DbSet<T>.Localを使用してメモリに問い合わせることができます。

あなたが使用するEF < 4.1では

ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added).Select(o => o.Entity).OfType<Product>() 
+0

をので、DBとメモリの両方の要素で設定された結果を得るために、私は自分の別のリストを維持し、現在までそれを維持しようとする必要があります。 EF 4.0のための提案された解決策はありますか? –

+0

私はあなたの質問を理解していません - 私はあなたにEF 4.0/EF 1の解決策を教えました。 –

+0

申し訳ありません...私の悪い...私は間違っています –

関連する問題