Какой ORM использовать?

Я разрабатываю приложение, которое будет иметь эти классы:

class Shortcut
{
    public string Name { get; }
    public IList Triggers { get; }
    public IList Actions { get; }
}

class Trigger
{
    public string Name { get; }
}

class Action
{
    public string Name { get; }
}

И я буду иметь 20 + больше классов, которые произойдут из Trigger или Action, таким образом в конце, у меня будет тот Shortcut класс, 15 Action- производные классы и 5 Trigger- производные классы.

Мой вопрос, какой ORM лучше всего удовлетворит этому приложению? EF, NH, SubSonic, или возможно что-то еще (Linq2SQL)?

Я буду периодически выпускать новые версии приложения, добавляя больше триггеров и действий (или изменяя текущие триггеры/действия), таким образом, я должен буду обновить схему базы данных также. Я не знаю если EF или NH обеспечивает любые хорошие методы легко обновить схему. Или если они делают, там какое-либо учебное руководство, как сделать это?

Я уже нашел эту статью о NH обновление схемы, заключение в кавычки:

К счастью, NHibernate предоставляет нам возможность обновить существующую схему, которая является NHibernate, создает сценарий обновления, который может быть примененным к базе данных.

Я никогда не находил, как на самом деле генерировать сценарий обновления, таким образом, я не могу сказать NH обновить схему. Возможно, я неправильно читал что-то, я просто не сделал нашел его.

Примечание: Если Вы предлагаете EF, будет EF 1,0 подходящих также? Я использовал бы некоторую более старую.NET, чем 4.0.
Примечание 2: платформа ORM должна быть свободной для коммерческого использования.
Примечание 3: Я буду также использовать запутанность кода, случайным образом переименовывая все символы и т.д...., таким образом, к ORM должен будет поддерживать это.

13
задан Paya 30 April 2010 в 22:37
поделиться

3 ответа

До .NET 4 Entity Framework на мой вкус не была достаточно развитой. Кроме того, он не поддерживает POCO.

Без EF я бы выбрал NHibernate. Чтобы упростить настройку на основе кода, я бы также использовал Fluent NHibernate. NHibernate очень зрелый и пользуется большой поддержкой сообщества. Он имеет отличное средство для обновления схемы базы данных из последнего кода. Настоятельно рекомендуется.

Я не думаю, что какие-либо другие варианты являются серьезными. Entity Framework быстро приобретет популярность, потому что она встроена и серьезно продается MS. NHibernate останется жизнеспособным конкурентом, потому что он пользуется большой популярностью и зрелостью. Остальные будут постепенно отходить на второй план, пока ими не воспользуется лишь небольшое число ярых сторонников.

7
ответ дан 2 December 2019 в 00:45
поделиться

Я думаю, что здесь вы сравниваете два отдельных класса систем:

  • SubSonic и Linq-to-SQL довольно просты, тонкий слой поверх базы данных. Они предоставляют в основном только сопоставление 1:1 между таблицей базы данных и объектом домена. Если это достаточно хорошо для вашего случая, то эти инструменты являются самыми простыми, простыми в использовании и наиболее эффективными ORM

  • EF в .NET 4 и NHibernate находятся в совершенно другом классе - они предоставляют функции корпоративного уровня, они поддерживают несколько баз данных, они поддерживают сопоставление и трансформацию структуры базы данных в другую выглядящую структуру домена, и они хороши в этом. EF4 также поддерживает POCO, и все проблемы, которые использовались против EF ранее, в значительной степени являются спорными с версией Entity Framework .NET 4.

    Но и NHibernate, и EF4 более сложны, они требуют больше настроек, больше кривой обучения, пока вы не «получите это», они немного тяжелее на ногах, у них есть дополнительные слои отображения, которые обеспечивают эти расширенные функции, но они также стоят производительности и усложняют ситуацию в целом.

Поэтому я думаю, что это действительно сводится к вашим требованиям: если вам нужна довольно простая и удобная в использовании система, используйте Linq-to-SQL или Subsonic. Если вам нужно больше функций корпоративного уровня и вы не возражаете против дополнительной работы, необходимой для настройки этих ORM, выберите EF4 или NHibernate.

6
ответ дан 2 December 2019 в 00:45
поделиться

См. DataObjects.Net: хотя это коммерческий, есть функции, которые вам нужны (например, обновление схемы).

0
ответ дан 2 December 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: