0

EF4です。簡単な質問があります。次のようなコンテキスト オブジェクトにいくつかの販売注文を追加するとします。

Dim NewOrder = context.SalesOrders.CreateObject()
NewOrder.Number= 123
context.SalesOrders.AddObject(NewOrder)

私はまだ SaveChanges() を呼び出していません。これを使用して、コンテキストに Number=123 の注文があるかどうかを確認したいと思います。

context.SalesOrder.FirstOrDefault(Function(x) x.Number=123)

上記のクエリが何も返さないのはなぜですか? ローカル コンテキスト オブジェクトではなく、データベースを検索していますか?

4

2 に答える 2

0

Number は SalesOrder エンティティの主キーですか?

その場合、.Find() を使用できます。最初にローカル エンティティをクエリし、ローカル エンティティ コレクションに何も見つからない場合にのみデータベースをクエリします。

context.SalesOrders.Find(number);

find は主キーのみを受け入れることができ、他の LINQ 操作のようにラムダは受け入れられないことに注意してください。

于 2013-02-25T12:58:18.490 に答える
0

オブジェクト状態マネージャーを介してローカル エンティティを検索できます (C# 構文ですが、VB.NET の同等物は明らかです)。

context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Unchanged).Select(entry => entry.Entity).OfType<SalesOrder>()

それは実際にDbSet.Local舞台裏でも行われていることです。これを一般的なヘルパー関数としてコンテキストで利用できるようにすることは、努力する価値があるかもしれません。

于 2013-02-25T15:15:14.043 に答える