エンティティ フレームワーク 4.0 で予期しない動作が発生しています。誰かがこれを理解するのを手伝ってくれることを願っています。この質問のためにノースウィンド データベースを使用しています。また、デフォルトのコード ジェネレーターも使用しています (poco やセルフ トラッキングではありません)。フレームワークのコンテキストをクエリして、それらのオブジェクトをまだフェッチしていない場合にのみ往復することを期待しています。遅延読み込みをオフにすると、この動作が発生します。現在、私のアプリケーションでは、遅延読み込みを簡単にオンにしてからオフにして、目的の動作を得ることができます。それはかなりひどいので、助けてください。これは私の問題を示す良いコード例です。
Public Sub ManyRoundTrips()
context.ContextOptions.LazyLoadingEnabled = True
Dim employees As List(Of Employee) = context.Employees.Execute(System.Data.Objects.MergeOption.AppendOnly).ToList()
'makes unnessesary round trip to the database, I just loaded the employees'
MessageBox.Show(context.Employees.Where(Function(x) x.EmployeeID < 10).ToList().Count)
context.Orders.Execute(System.Data.Objects.MergeOption.AppendOnly)
For Each emp As Employee In employees
'makes unnessesary trip to database every time despite orders being pre loaded.'
Dim i As Integer = emp.Orders.Count
Next
End Sub
Public Sub OneRoundTrip()
context.ContextOptions.LazyLoadingEnabled = True
Dim employees As List(Of Employee) = context.Employees.Include("Orders").Execute(System.Data.Objects.MergeOption.AppendOnly).ToList()
MessageBox.Show(employees.Where(Function(x) x.EmployeeID < 10).ToList().Count)
For Each emp As Employee In employees
Dim i As Integer = emp.Orders.Count
Next
End Sub
コードの最初のブロックが不要な往復を行うのはなぜですか?