2011-08-04 45 views
1

我是新来的EF,并且第一次需要在同一时间执行多个查询,可以说我有我的BLL和DAL生成的EF,我也有一个viewModel,我正在引用BLL DAL和检索数据是这样的:EntityFramework多个查询多个DataContexts?多连接?

public Decimal getPrice() 
    { 
     Decimal x = 0; 
     siliconContext = new DAL.Entities(); 
     var result = from d in siliconContext.SILICONs 
        select d.MIN_PRICE; 
     foreach (Decimal d in result) 
     { 
      x = d; 
     } 
     return x; 
    } 

都好,在视图模型我只使用这个代码两行:

Silicon sil = new Silicon(); 
Price = sil.getPrice(); 

我假定上下文将处理连接,打开连接,做一些事情,然后关闭它,但现在我处于一种情况,在我的ViewModel中,我将引用两个BLL,它们将引用两个DAL和c在同一个方法中有两种不同的上下文,谁来管理呢? EF 4是否足够聪明,只能打开一个连接,让两个或更多的上下文来完成他们的工作,然后关闭连接?这里是我的视图模型将如何看起来像

Silicon sil = new Silicon(); 
Price = sil.getPrice(); 
Glass gl = new Glass(); 
GlassPrice = gl.getPrice(); 

回答

1

首先,您需要关闭DataContext的连接。

public Decimal getPrice() 
{ 
    Decimal x = 0; 
    using (DAL.Entities siliconContext = new DAL.Entities()) 
    { 
     var result = from d in siliconContext.SILICONs 
        select d.MIN_PRICE; 
     foreach (Decimal d in result) 
     { 
      x = d; 
     } 
     return x; 
    } 
} 

其次,如果你想从两个表中获取数据,然后执行以下操作。

public Decimal getPrice() 
{ 
    Decimal x = 0; 
    using (DAL.Entities siliconContext = new DAL.Entities()) 
    { 
     var result = from d in siliconContext.SILICONs 
        select d.MIN_PRICE; 

     var result2 = from d in seliconContext.GLASEs 
         select d.MIN_PRICE; 

     //You can then work with results from table GLASE! 

     foreach (Decimal d in result) 
     { 
      x = d; 
     } 
     return x; 
    } 
} 
+0

感谢您的答复,我只有一个数据库,在我的例子我想从两个表中,硅和玻璃检索,我明白你的第一个代码片段,但第二个代码片段没有回答我的问题,你是说只有一个数据库和多表格,我仍然会使用一个上下文吗? ,那我该怎么做?完成我最后的代码片段? – Musaab

+0

请看我更新的答案。 – Jethro

+0

同意,我现在理解了一些新东西,但仍然请看我的帖子中的最后一个代码,我有两个不同的类(硅和玻璃),每个类将引用它的DAL类,每个DAL类将自己连接到数据库,因为每个类都会执行它自己的getPrice()方法,这意味着两个不同的连接,连接会一个接一个地打开和关闭,对于性能而言这并不好,我想这是一个设计问题,但我不确定,我希望你得到了我的观点 – Musaab