实体框架多个查询多个数据上下文?多个连接
本文关键字:连接 上下文 查询 框架 实体 数据 | 更新日期: 2023-09-27 18:04:22
我是EF的新人,第一次我需要同时执行多个查询,假设我有EF生成的BLL和DAL,我也有一个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();
我假设上下文将处理连接,打开连接,做一些事情,然后关闭它,但现在我在我的ViewModel的情况下,我将引用两个bll,他们将引用两个DALs,当然两个不同的上下文在同一个方法,谁将管理这个?EF 4是否足够聪明,只打开一个连接,让两个(或更多)上下文完成它们的工作,然后关闭连接?下面是我的viewModel看起来像
的一个例子Silicon sil = new Silicon();
Price = sil.getPrice();
Glass gl = new Glass();
GlassPrice = gl.getPrice();
首先你需要关闭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;
}
}
您需要管理objectcontext的生命周期,以便正确地初始化和处置它们。有关上下文生命周期管理的优秀资源,请参阅http://blogs.msdn.com/b/alexj/archive/2009/05/07/tip-18-how-to-decide-on-a-lifetime-for-your-objectcontext.aspx