Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
context.Orders.Where(order => order.Dealer.Kind == 1 || order.Dealer.Kind == 2)сравните с NH:var qOrders = DetachedCriteria.For<Order>();
var qDealer = qOrders.CreateCriteria("Dealer");
qDealer.Add(Restriction.Or(Restriction.Eq("Kind", 1), Restriction.Eq("Kind", 2));
return session.List<Order>(qOrders);context.AutoDetectChangesEnabled = prevEnabledValue;
var prevEnabledValue = context.AutoDetectChangesEnabled;
try {
context.AutoDetectChangesEnabled = false;
...
} finally { context.AutoDetectChangesEnabled = prevEnabledValue; }
при выключении AutoDetectChangesEnabled, все изменённые объекты не сохраняются автоматически в БД при закрытии контекста
SaveChanges(). context.ChangeTracker.DetectChanges(). В зависимости от сложности модели, количестве объектов в контексте и характере операций, которые были выполнены, такой подход может поднять производительность. А может и значительно снизить.Microsoft имеет возможность модифицировать язык под фреймворк (ниже покажу на примере Expression Trees).
Если у db-класса Entity есть поле int EntityId, оно автоматически становится primary key, без дополнительных подсказок, если есть поле Order Order и поле int OrderId, фреймворк понимает, что OrderId — foreign Key для Order.
В отличии от NH, EF не требует описания каждого поля как virtual, а только для lazy-полей.
Запросы в EF строятся через знакомый всем linq, а не с использованием новых классов и новых методов, как в NHibernate (всякие ICriterion, DetachedCriteria, Restrictions и т. п.)
Ещё о NH. Маппинги описываются в XML-аннотациях. Обычно, каждый entity-класс сопровождается xml-файлом с маппингом. Существует велосипед в community contrib делать маппинги атрибутами, который при запуске проекта рефлектит все классы в указанных сборках, делает XML из атрибутов и скармливает его ORM. Но не все конструкции, выражаемые в XML, можно описать атрибутами (хотя в одном проекте можно совмещать два подхода). В-общем, после NH переход на EF кажется очень приятным.
Из минусов EF отмечу катастрофичекое падение производительности при большом количестве объектов в контексте.
Есть такой вопрос — а navigation property вообще получается нефункциональная фича?
var count = context.Threads.Where(e=> e.id == folder.id).Count();
Еще один взгляд на Entity Framework: производительность и подводные камни