EntityFramework多个查询多个DataContexts?多个连接?

时间:2011-08-04 08:10:30

标签: 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
                     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();

2 个答案:

答案 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;
    }
}