Отображение NHibernate

Я оцениваю некоторые ORM для своего будущего проекта. Мне не нравится подход EF для моей конкретной цели, потому что у меня уже есть бизнес-объекты, которые я хочу сделать постоянными, и я хочу настроить таргетинг как минимум на 1 СУБД, кроме SQL Server. Я провел небольшое исследование по OpenAccess ORM Telerik. он выглядит очень мощным, но при этом очень сложным для изучения, а его документация несколько устарела, поскольку их примеры не работают для последней версии. Сейчас думаю попробовать NHibernate. Он выглядит великолепно, но, насколько мне известно, у него нет готового к работе поставщика LINQ, что для меня является огромным недостатком. Но я думаю, что смогу без этого прожить.

Теперь о вопросе. В моем проекте несколько сборок, каждая из которых содержит разные бизнес-объекты. Я хочу создать еще одну сборку, подобную DAL, которая будет обрабатывать все операции CRUD для всех бизнес-объектов, которые разделены на разные сборки. Я знаю, что NHibernate нужны сопоставления xml, но в моей ситуации, в какую сборку (-ы) мне следует встраивать файлы сопоставления xml, в сборку DAL или в каждую сборку, содержащую бизнес-объект?

Спасибо


person Davita    schedule 02.01.2011    source источник


Ответы (3)


NHibernate 3.0 имеет новый API запросов, который называется Query Over, и он очень похож на LINQ.

Файлы сопоставления должны быть помещены в сборку, содержащую бизнес-логику.

person Frederik Gheysels    schedule 02.01.2011
comment
Итак, могу ли я иметь файл сопоставления и объект сущности в разных сборках? - person Davita; 02.01.2011
comment
@Davita да, вы можете, и я обычно помещаю файлы сопоставления в сборку, которая содержит мой уровень данных. - person Vadim; 03.01.2011
comment
Спасибо, парни. Я думаю, что пойду на NHibernate - person Davita; 03.01.2011

В другом порядке я хочу добавить кое-что, что может вам пригодиться. nHibernate сохраняет сопоставления xml для классов, но, поскольку я не большой поклонник этой идеи, я решил поискать что-то, что позволило бы мне определить сопоставления в коде, ответ был простым проектом под названием Свободное использование nHibernate.

С помощью этого проекта вы можете определить свои сопоставления в файл класса, и все останется как код C #, поэтому в первую очередь устраняет проблему с встраиванием файлов xml.

Вы можете поискать документацию по Fluent nHibernate, но основная идея будет такой:

public class CatMap : ClassMap<Cat>
{
  public CatMap()
  {
    Id(x => x.Id);
    Map(x => x.Name)
      .Length(16)
      .Not.Nullable();
    Map(x => x.Sex);
    References(x => x.Mate);
    HasMany(x => x.Kittens);
  }
}

Я надеюсь, что смогу помочь.

person David Conde    schedule 04.01.2011
comment
+1 за упоминание FluentNHibernate. OP действительно должен изучить это. - person Marcel; 04.01.2011
comment
Спасибо, Дэвид. Я знаю Fluent API, но мне немного сложнее работать, чем с сопоставлением xml, поэтому я решил пойти по старому пути xml. В любом случае спасибо :-) Проголосовать - person Davita; 06.01.2011

Помимо упоминания Дэвидом FluentNHibernate, я хочу отметить, что у NH3 есть собственный поставщик LINQ, который теперь достаточно зрел для большинства проектов.

Я использую FluentNHibernate и LINQ в своем текущем проекте, и меня это вполне устраивает. Вы можете загрузить последнюю сборку FluentNHibernate для NH3 по адресу http://fluentnhibernate.org/dls/v1.x/fluentnhibernate-NH3.0-binary-1.2.0.694.zip

person Marcel    schedule 04.01.2011
comment
Я помню старый проект LINQ для nHibernate, как 3 года назад, Айенде Рахиен, это то же самое? Извините за незнание, но я все еще использую NH 2.1! - person David Conde; 07.01.2011