我是EF的新手,并且我第一次需要同时执行多个查询,假设我有我的BLL和DAL由EF生成,我也有一个viewModel,在BLL我是引用DAL并检索如下数据:
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;
}
一切都很好,在viewModel上我只使用了这两行代码:
Silicon sil = new Silicon();
Price = sil.getPrice();
我假设Context将处理连接,打开连接,执行某些操作然后关闭它,但现在我处于一种情况,在我的ViewModel中,我将引用两个BLL,它们将引用两个DAL和当然两种不同的上下文在同一种方法中,谁来管理这个呢? EF 4是否足够聪明,只能打开一个连接,让两个或多个上下文完成他们的工作,然后关闭连接?这是我的viewModel看起来像
的示例Silicon sil = new Silicon();
Price = sil.getPrice();
Glass gl = new Glass();
GlassPrice = gl.getPrice();
答案 0 :(得分:1)
您需要管理objectcontext的生命周期才能正确初始化和处理。有关上下文生命周期管理的优秀资源,请参阅http://blogs.msdn.com/b/alexj/archive/2009/05/07/tip-18-how-to-decide-on-a-lifetime-for-your-objectcontext.aspx
答案 1 :(得分: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;
}
}