Сгенерированный SQL достаточно эффективен, но, хотя я еще не прибегал к SP, я написал несколько представлений (в 4.0) и написал LINQ против них в местах, чтобы преодолеть некоторые проблемы с производительностью.
противоречит ли 4.1 передовому опыту хранимых процедур?Что ж, SP - лучшая практика по ряду причин - производительность - это одно, изоляция и абстракция базовой структуры таблицы от вашего кода - это другое.Часть производительности, по-видимому, была заброшена как «вероятно, не так уж и важна в наши дни» по причинам, которые мне не нравятся на 100%.И проблема абстракции - ну, вы по какой-то причине используете EF Code First - причина в том, что вы ищете постоянную среду для своих объектов приложений: самим выбором EF Code First вы заявляете, что не делаетеХотите знать, как они хранятся, в каких структурах и что происходит, чтобы вернуть их.
Как вы настраиваете это?Главным образом, будучи очень осторожным с отложенной загрузкой, следя за тем, что происходит на стороне SQL (EFProf - один из инструментов, профилирование запросов MSSql тоже работает) и, как правило, зацикливаясь на вещах.
Чтобы убедиться, что вы используете последнюю версиюEF (если вы работали с CodeFirst CTP) использует консоль NuGet и
uninstall-package EFCodeFirst
install-package EntityFramework
4.1 имеет улучшения по сравнению с 4.0 для базы данных в первую очередь, а именно облегченный dbContext
EDIT: добавление кода по запросу... Простой случай
foreach (var order in orders) y=order.orderlines.tolist();
, который вы исправляете с помощью
foreach (var order in orders.Include("orderlines").tolist()) y=order.orderlines.tolist();
, но менее очевидным является
foreach (var order in orders.Include("orderlines").tolist()) dothing(order);
где
public void dothing(Orderline ol)
{
if (ol.order.property=true)
....
}
чтобы исправить это, я думаю, вам нужно
foreach (var order in orders.Include("orderlines.orders").tolist()) dothing(order);
(или, что еще лучше, от рефакторинга (Orderline ol) до dothing (Orderline ol, Order ord). Я хочу сказать, что с локальной базой данных невероятно легко пропустить этиТолько когда вы профилируете sql, или подключаетесь к базе данных SQL в медленной сети (например, Azure), или просто получаете серьезную нагрузку, это начинает причинять боль!