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
}
并重新运行,我只得到两个退出消息。
每个嵌套查询是否在其自己的线程中运行?这些信息是否值得担忧?
你能解释这些消息来自哪里,为什么忽略它们是安全的吗? – chris 2012-03-07 19:04:28
@chris,我推测你在Visual Studio调试器中看到这些消息。它显示所有线程。当您正在处理多线程应用程序(如ASP.NET)并以调试模式运行时,VS将跟踪所有线程,并且在多线程应用程序中,您有大量涉及的线程来处理请求。它们都表示返回代码0意味着那些线程成功地完成了他们应该做的任何事情(我想为您的工作请求提供服务),因此您可以放心地忽略它们。 – 2012-03-07 19:06:35