MVC DataContext Можно использовать одно соединение или нет
-
22-07-2019 - |
Вопрос
Когда «единица работы» перестает быть «единицей»?Какой сценарий лучше с точки зрения ресурсов?Первый создает одно соединение, а второй создает 4.
using (DataContext dc=new DataContext)
{
var orders= from o in dc.orders
select ( new Product { property a= from a in ..join... select x,
property b= from b in ..join... select y,
property c= from c in ..join... select z.}
)
}
ИЛИ
using (DataContext dc=new DataContext)
{
var orders= from o in dc.orders
select ( new Product { property a = GetPropertyA(),
property b = GetPropertyB(),
property c = GetPropertyC()}
)
}
Решение
Если при использовании LINQ вы добавляете один объект к другому, и они используют другой контекст данных, вы получите ошибку.Я бы предложил сохранять один и тот же контекст данных для каждой используемой вами единицы работы.Вы можете легко определить обрабатываемую единицу работы, используя шаблон репозитория для записи классов доступа к данным.Если вам не совсем понятен шаблон репозитория, проверьте эту запись
Другие советы
Вообще говоря, чем меньше обращений к вашей базе данных, тем лучше.Однако в крупномасштабных приложениях мы часто делаем наши базы данных все более и более «тупыми», поэтому в конечном итоге мы не выполняем никаких соединений и не нагружаем процессор и память на сервере базы данных SQL.Это действительно зависит от того, какие ресурсы вы считаете более дефицитными.Если на вашем SQL-сервере достаточно ресурсов, выполните соединение там, в противном случае было бы лучше вернуть его отдельно.Вы смотрели на результаты этого в профилировщике SQL?Вы уверены, что это 4 соединения или просто 4 отдельных звонка?