Linq to SQL Расширенные классы данных - Поделиться DataContext

Я использую функцию частичных классов Linq2SQL, чтобы добавить некоторые вспомогательные методы в мои объекты.

Проблема в том, что мне нужно выполнить некоторые дополнительные запросы к базе данных в этих вспомогательных методах, поэтому мне приходится каждый раз создавать новый DataContext.

Я хочу повторно использовать DataContext для всех операций базы данных в рамках одного запроса веб-службы.

Если я храню вспомогательные методы в отдельном классе, я просто один раз инициализирую контекст в конструкторе класса и повторно использую его для всех методов.

С расширенными классами Linq2SQL я не могу понять, как получить ссылку на тот же DataContext, который использовался для получения текущего объекта.

3 ответа

Решение

В самом деле, вы не можете на самом деле, как таковой. Не в последнюю очередь потому, что LINQ-to-SQL может работать с POCO. Вы должны обрабатывать свой контекст данных вручную и удерживать их, если хотите использовать их в различных точках. Один из подходов здесь может заключаться в том, чтобы сделать метод доступным из контекста данных, а не из конечного объекта - тогда вы вынуждены знать контекст данных.

В некоторых случаях поддержание контекста данных доступным для объекта "запрос" или "контекст" может быть хорошим способом обойти это, так как это обычно тривиально доступно.

Я не верю, что есть способ получить контекст для создания данных. Вы должны передать его в ваши собственные методы. Внутри моих частичных классов сущностей я выполняю много операций, подобных этой:

public void Query()
{
    using (var db = new DataContext())
    {
         Query(db);
    }
}

public void Query(DataContext db)
{
    /* do something with the db */
}

Это дает вам возможность передать DataContext, который создал объект, или просто использовать новый в крайнем случае.

Проблема в том, что мне нужно выполнить некоторые дополнительные запросы к базе данных в этих вспомогательных методах, поэтому мне приходится каждый раз создавать новый DataContext.

Нет, ты не Запретить добавление бизнес-логики к вашим объектам L2S. Он мгновенно превратится в неуправляемый запутанный клубок грязи. Поместите эти операции в классы обслуживания, которые используют эти объекты. Например, используйте шаблоны команда / обработчик и запрос / обработчик.

Я хочу повторно использовать DataContext для всех операций базы данных в рамках одного запроса веб-службы.

Что бы вы ни делали, помешайте DataContext экземпляр от использования несколькими потоками. Что вы можете сделать, это один DataContext за веб-запрос.

Другие вопросы по тегам