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
за веб-запрос.