1
私はEF 4.1で複雑な構造を作成しています。非常に単純化されたバージョンは、次のようになります。EFネストされたクエリは別々のスレッドで実行されますか?
var top = from x in _context.top
select new TopView
{
field = top.field,
sub = (from y in x.RelatedTable
select new SubView
{
subfield = y.subfield,
subsub = (from z in y.AnotherRelatedTable
select new SubSubView
{
subsubfield = z.subsubfield
}
)
}
)
}
のviewmodelsは、次のようになります。私は私のコントローラで上面図オブジェクトを取得します(ただし、数秒後に、任意のプロパティにアクセスしない場合は
public class TopView {
string field { get; set; }
IEnumerable<SubView> sub { get; set; }
}
public class SubView {
string subfield { get; set; }
IEnumerable<SubSubView> sub { get; set; }
}
public class SubSubView {
string subsubfield { get; set; }
}
、私の出力を示し:
The thread '<No Name>' (0x1b44) has exited with code 0 (0x0).
The thread '<No Name>' (0x1448) has exited with code 0 (0x0).
The thread '<No Name>' (0xf34) has exited with code 0 (0x0).
さて、サブビューがどのように見えるように、私は最も内側の構造を削除する場合:
select new SubView
{
subfield = y.subfield
}
もう一度実行すると、2つの終了メッセージしか取得できません。
各ネストされたクエリは独自のスレッドで実行されますか?メッセージは心配するものですか?
これらのメッセージがどこから来ているのか、無視するのがなぜ安全であるのか説明できますか? – chris
@chris、私はあなたがVisual Studioデバッガでそれらのメッセージを見ていると思います。すべてのスレッドを表示します。 ASP.NETなどのマルチスレッドアプリケーションで作業していて、デバッグモードで実行している場合、VSはすべてのスレッドをトレースし、マルチスレッドアプリケーションでは要求を処理するためのスレッドが多数あります。それらはすべて0の戻りコードを示しています。つまり、それらのスレッドは正常に完了したことを意味します(私はあなたのワーカーにサービスを提供していると思います)ので、無視しても問題ありません。 –