Entity Framework 4.1 код первых мнений производительности - PullRequest
2 голосов
/ 04 августа 2011

Сначала я использую код Entity Framework 4.1 без хранимых процедур.И я хотел бы знать общее мнение о производительности этого для огромных приложений, видя, что оно генерирует SQL в фоновом режиме.Разве это не идет вразрез с передовой практикой отказа от использования хранимых процедур?Как вы тонко настраиваете этот сгенерированный код?

Я знаю, что вы можете взломать его, чтобы использовать хранимые процедуры, но определенно будет поддержка хранимых процедур и других функций, которые вы получите при первом обращении к базе данныхoption?

Есть ли в EF 4.1 какие-либо улучшения в первом варианте базы данных?Как я узнаю, что у меня установлена ​​последняя версия EF?

1 Ответ

3 голосов
/ 04 августа 2011

Сгенерированный 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), или просто получаете серьезную нагрузку, это начинает причинять боль!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...