BLToolkit с Linq - Почему требуется оператор `using`? - PullRequest
3 голосов
/ 28 июня 2011

В свете недавних (экстремальных) проблем с производительностью SubSonic 3 мы собираемся перенести ORM, желательно переписать как можно меньше кода (в основном это Linq).

Итак, я смотрю на BLToolkit. Одно из основных различий между SubSonic и BLToolkit, которое я вижу, заключается в том, что BLToolkit всегда требует оператора using. Например:

static void SingleTableTest()
{
    using (var db = new NorthwindDB()) //This
    {
        var query =
            from e in db.Employee
            where e.EmployeeID > 5
            orderby e.LastName, e.FirstName
            select e;

        foreach (var employee in query)
        {
            Console.WriteLine("{0} {1}, {2}", employee.EmployeeID, employee.LastName, employee.FirstName);
        }
    }
}

Что именно это делает? Когда вы создаете новый экземпляр базы данных, она создает новое соединение? Было бы разумно "обернуть" это в статический класс, чтобы я мог сделать это из любого места var q=from e in Database.Employee ...? Какие последствия это может иметь в контексте веб-приложения?

Ответы [ 2 ]

4 голосов
/ 29 июня 2011

Полагаю, класс NorthwindDB в вашем примере основан на DbManager. DbManager является оболочкой для Connection и ведет себя как соединение. Вы должны попробовать другой класс - DataContext. Он предназначен именно для вашего сценария.

0 голосов
/ 28 июня 2011

Я не знаю BLToolkit, но из вашего комментария было сказано, что вы хотите знать, возможно ли просто использовать один объект для HTTP-запроса, с чем-то вроде Entity Framework.Вместо оператора using вы создаете объект db в событии Application_BeginRequest global.asax.Вы избавляетесь от него в Application_EndRequest.Вы можете сохранить объект в HttpContext.Current.Items, который является удобной коллекцией для каждого запроса.

Как я уже сказал, я не знаю, относится ли это конкретно к BLToolkit, потому что я ничего о нем не знаю, но, надеюсь, этого достаточно, чтобы указать вам правильное направление.:)

...