Parallel EntityFramework

时间:2010-04-28 11:13:29

标签: c# entity-framework parallel-processing

是否有可能与以下示例的实体框架并行工作?

using (var dbContext = new DB())
{
var res = (from c in dbContext.Customers
           orderby c.Name
           select new
                    {
                    c.Id, 
                    c.Name,
                    c.Role
                    }
          ).ToDictionary(c => c.Id,
                         c => new Dictionary<string, object> {
                                                               { "Name",c.Name },
                                                               { "Role", c.Role }
                                                             });
}

例如,如果我添加AsParrallel会改变什么?

using (var dbContext = new DB())
{
var res = (from c in dbContext.Customers
           orderby c.Name
           select new
                    {
                    c.Id, 
                    c.Name,
                    c.Role
                    }
          ).AsParallel().ToDictionary(c => c.Id,
                         c => new Dictionary<string, object> {
                                                               { "Name",c.Name },
                                                               { "Role", c.Role }
                                                             });
}

还有一个例子。问题是3个例子中的差异是什么。

using (var dbContext = new DB()) 
{ 
var res = (from c in dbContext.Customers.AsParallel() 
           orderby c.Name 
           select new 
                    { 
                    c.Id,  
                    c.Name, 
                    c.Role 
                   } 
          ).AsParallel().ToDictionary(c => c.Id, 
                         c => new Dictionary<string, object> { 
                                                               { "Name",c.Name }, 
                                                               { "Role", c.Role } 
                                                             }); 
} 

2 个答案:

答案 0 :(得分:8)

不,查询是在数据库上运行的,而不是在客户端中运行的。数据库可以使用多个线程来执行查询以加速该过程,但在任何情况下,您都无法将服务器端处理与客户端并行扩展组合在一起。

答案 1 :(得分:1)

您可以使用PLINQ(并行LINQ)

http://msdn.microsoft.com/en-us/library/dd460688.aspx

http://msdn.microsoft.com/en-us/magazine/cc163329.aspx

例如(从上面):

  

IEnumerable data = ...; var q =   data.AsParallel()。其中​​(x =&gt;   p(x))。Orderby(x =&gt; k(x))。选择(x =&gt;   F(X));

     

foreach(q中的变量)a(e);

对于foreach,您也可以看作使用TPL(任务并行库)版本。 http://msdn.microsoft.com/en-us/library/dd460717(v=VS.100).aspx