EntityFramework Несколько запросов Несколько DataContexts? Несколько подключений? - PullRequest
1 голос
/ 04 августа 2011

Я новичок в 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();

Я предполагал, что Контекст будет обрабатывать соединение, открывать соединение, делать что-то и затем закрывать его, но теперь я нахожусь в ситуации, когда в моей модели ViewModel я буду ссылаться на два BLL, которые они будут ссылаться на два DAL и конечно два разных контекста в одном и том же методе, кто будет этим управлять? EF 4 достаточно умен, чтобы открыть только одно соединение и позволить двум или более контекстам выполнить свою работу, а затем закрыть соединение? Вот пример того, как моя viewModel будет выглядеть

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

Ответы [ 2 ]

1 голос
/ 04 августа 2011

Прежде всего вам необходимо закрыть соединение 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;
    }
}
1 голос
/ 04 августа 2011

Вам потребуется управлять временем жизни вашего объекта контекста для его правильной инициализации и удаления.За отличным ресурсом по управлению временем жизни контекста обращайтесь к http://blogs.msdn.com/b/alexj/archive/2009/05/07/tip-18-how-to-decide-on-a-lifetime-for-your-objectcontext.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...