Какую ORM использовать? - PullRequest
       10

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

13 голосов
/ 25 апреля 2010

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

class Shortcut
{
    public string Name { get; }
    public IList<Trigger> Triggers { get; }
    public IList<Action> 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 должен это поддерживать.

Ответы [ 3 ]

7 голосов
/ 25 апреля 2010

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

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

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

6 голосов
/ 26 апреля 2010

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

  • 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.

0 голосов
/ 25 апреля 2010

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

...