C# EntityFramework多个查询多个数据上下文?多重连接?
我是EF的新手,第一次我需要同时执行多个查询,假设我的BLL和DAL由EF生成,我还有一个viewModel,在BLL上我引用DAL并检索如下数据:C# EntityFramework多个查询多个数据上下文?多重连接?,c#,wpf,entity-framework,C#,Wpf,Entity Framework,我是EF的新手,第一次我需要同时执行多个查询,假设我的BLL和DAL由EF生成,我还有一个viewModel,在BLL上我引用DAL并检索如下数据: public Decimal getPrice() { Decimal x = 0; siliconContext = new DAL.Entities(); var result = from d in siliconContext.SILICONs
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,它们将引用两个DAL,当然,在同一方法中引用两个不同的上下文,谁来管理它?EF4是否足够聪明,可以只打开一个连接,让两个或多个上下文完成工作,然后关闭连接?下面是我的viewModel的外观示例
Silicon sil = new Silicon();
Price = sil.getPrice();
Glass gl = new Glass();
GlassPrice = gl.getPrice();
您需要管理objectcontext的生存期,以便对其进行适当的初始化和处理。有关上下文生存期管理的优秀资源,请参阅首先,您需要关闭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;
}
}
谢谢你的链接,稍后再看谢谢你的回复,我只有一个数据库,在我的示例中,我试图从两个表中检索,Silicon和Glass,我理解你的第一个代码片段,但是第二个没有回答我的问题,你是说对于一个数据库和多表,我仍然使用一个上下文吗,那我怎么做呢?为了完成我的最后一段代码?同意,我现在理解了一些新的东西,但是请看我文章中的最后一段代码,我有两个不同的类(Silicon和Glass),每个类都会引用它的DAL类,每个DAL类都会自己连接到数据库,因为每个类都会执行它自己的getPrice()方法,这意味着两个不同的连接,连接会一个接一个地打开和关闭,这不好,我想这是一个设计问题,但我不确定,我希望你明白我的意思。是的,你有点担心PreFace总是打开和关闭与数据库的连接。我个人更喜欢这种方法,也就是说,对于特定的工作单元,连接的生命周期只是“活的”。我不会太在意演出。此外,Ragzitsu还展示了一个非常好的链接,可以帮助您解释大多数问题。希望这有帮助。