EF4 для разработчика nHibernate? - PullRequest
0 голосов
/ 20 августа 2010

Мне нужно ворваться в EF4 впервые с тех пор, как я испытал разочарование v1.С тех пор я был счастливым пользователем nHibernate, но мне нужно сейчас выбрать EF для нового проекта из-за предпочтений клиента.

Кто-нибудь создал краткое руководство по аналогиям между концепциями ORM для двух??Если бы у меня был перевод концепций nHibernate на концепции EF4, это дало бы мне старт.

Например, есть ли аналог HQL (это стоит использовать), как насчет запроса Criteria, отображения классов,sql пользовательский диалект, привлечение элементов в транзакцию, выполнение хранимой процедуры и т. д.

Любые идеи будут высоко оценены,

Ответы [ 2 ]

4 голосов
/ 21 августа 2010

Так как никто не прыгнул на этом, я вышел и начал читать из разных источников в Интернете, чтобы собрать воедино то, что EF4 кажется. Я напишу здесь свои источники, если кому-то в будущем понадобится провести такое расследование.

Вот напыщенная речь о NH против EF, которая многословна, но обсуждает некоторые интересные темы.

Собственная документация Microsoft по EF находится здесь и была несколько полезна, хотя полностью игнорировала отображение POCO и плавные отображения, которые кажутся более NH-подобными.

Существует новое дополнение к ожидающему EF, которое, кажется, имитирует беглые отображения NH. Вот хорошая, простая статья / обзор этой функции и вот ссылка на последний Microsoft CTP-код первого сайта .

Entity SQL является эквивалентом HQL.

Отображение и выполнение хранимых процедур называется «отображением функции» и очень похоже на то, как это делал Linq to SQL, за исключением того, что теперь, как сообщается, гораздо меньше шансов застрять с неизвестным типом результата, поскольку Вы можете явно не возвращать ничего, скаляр, сложный тип или сущность. Вот дополнительная ссылка на sp mapping для EF4.

Кажется, есть несколько способов нанести на карту вашу модель. Использование дизайнера EDMX является полностью автоматизированным способом и, по-видимому, отлично подходит для небольших проектов, где абсолютный контроль над сопоставлениями избыточен.

Есть несколько способов сделать запрос, наиболее дружественным к разработчику кажется LINQ to Entities и, конечно, он похож на LINQ to NH.

Вот другой пример отображения POCO .

В целом текущее состояние EF больше похоже на LINQ to SQL, чем на NHibernate, но, учитывая простоту использования L2S и постоянные инвестиции Microsoft в EF, кажется, что это хорошее начало.

Наконец, так как я разработчик, я не удержался от того, чтобы взять его на тест-драйв. Вот мой совет исследования айсберга. SQL Profiler подтвердил, что активная / отложенная загрузка работает так, как объявлено, и что обновление только обновляет измененные поля.

 // LINQ QUERY
 using (MsgEntities ctx = new MsgEntities()) {
    return (from m in ctx.Messages
            where m.SentAt.Month == 11
            select m).ToList();
 }

// GET ONE WITH OBJECT GRAPH
Message msg = null;
MsgEntities ctx = new MsgEntities();
msg = ctx.Messages // .Include("MessageAttachments.Attachment") -uncomment for eager loading
.Where(m => m.PK_Message == PK_Message).SingleOrDefault();

// ADD
using (MsgEntities ctx = new MsgEntities()) {
   ctx.Messages.AddObject(new Message() {
      Dsc = "added message @ " + DateTime.Now.ToString("dd-MMM-yy HH:mm:ss"),
      OriginalRecipientDsc = "Tahbaza",
      Sender = "Tahbaza",
      SentAt = new DateTime(2008, 11, 15),
      Subject = "Nothing special"
    });
}

// UPDATE
Message m = GetOneMessage(3);
using (MsgEntities ctx = new MsgEntities()) {
   ctx.Attach(m);
   m.Subject = "message UPDATED @ " + DateTime.Now.ToString("dd-MMM-yy HH:mm:ss");
   ctx.SaveChanges();
}

// DELETE
Message m = GetOneMessage(3);
using (MsgEntities ctx = new MsgEntities()) {
   ctx.Attach(m);
   ctx.DeleteObject(m);
   ctx.SaveChanges();
}

Надеюсь, это поможет кому-то, где я был 2 дня назад.

1 голос
/ 20 августа 2010

Вас может заинтересовать подход Code-first, исходящий от NH. Айенде довольно быстро взглянула на это, что может предложить вам некоторую ценность.

http://ayende.com/Blog/archive/2010/08/11/playing-with-entity-framework-code-only.aspx

...