Какой ОРМ использовать?
Я разрабатываю приложение, которое будет иметь эти классы:
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 создает обновление script, которое может быть применено к базе данных.
Я никогда не обнаружил, как реально генерировать обновление script, поэтому я не могу сказать NH
обновить схему. Возможно, я что-то неправильно понял, я просто не нашел его.
Примечание: Если вы предлагаете EF
, то будет EF
1.0 подходящим? Я бы предпочел использовать более старую .NET, чем 4.0.
Примечание 2: Структура ORM должна быть бесплатной для коммерческого использования.
Примечание 3: Я также буду использовать обфускацию кода, случайное переименование всех символов и т.д., поэтому ORM должен поддерживать это.
Ответы
Ответ 1
До .NET 4, Entity Framework была просто недостаточно зрелой для моих вкусов. Кроме того, он не поддерживает POCOs.
С EF out я бы выбрал NHibernate. Чтобы сделать конфигурацию на основе кода и несколько проще, я бы также использовал Fluent NHibernate. NHibernate очень зрелый и имеет большую поддержку сообщества. Он отлично подходит для обновления схемы базы данных из последнего кода. Очень рекомендуется.
Я не думаю, что кто-то из других - серьезные варианты. Entity Framework быстро получит разумную долю, потому что она встроена и серьезно продается MS. NHibernate останется жизнеспособным конкурентом, потому что он обладает большой популярностью и зрелостью. Остальные будут медленно падать на обочину, пока они не будут использоваться только небольшими числами горячих сторонников.
Ответ 2
Думаю, вы сравниваете два отдельных класса систем:
-
SubSonic и Linq-to-SQL довольно просты, тонкий слой поверх базы данных. Они обеспечивают в основном только сопоставление 1:1 между таблицей базы данных и объектом домена. Если это достаточно хорошо для вашего случая, то эти инструменты являются простейшими, самыми простыми в использовании и лучшими ORM-версиями тоже.
-
EF в .NET 4 и NHibernate находятся в совершенно другом классе - они предоставляют функции уровня предприятия, поддерживают несколько баз данных, поддерживают картографирование и преобразование структуры базы данных в другую перспективную структуру домена, хорошо в этом. EF4 также поддерживает POCO, и все проблемы, которые были использованы против EF, до сих пор довольно спорны с .NET Framework версии Entity Framework.
Но и NHibernate, и EF4 более сложны, они требуют больше настройки, больше кривой обучения, пока вы не "получите", они немного тяжелее на ногах, у них есть дополнительные слои отображения, которые позволяют использовать эти расширенные функции, но они а также эффективность затрат, и в целом они усложняют ситуацию.
Итак, я думаю, это действительно сводится к вашим требованиям: если вам нужна простая и простая в использовании система, переходите к Linq-to-SQL или Subsonic. Если вам нужно больше возможностей на уровне предприятия и не против дополнительной работы, необходимой для настройки этих ORM, выберите EF4 или NHibernate.
Ответ 3
См. DataObjects.Net: хотя это коммерчески, есть функции, которые вам нужны (например, обновление схемы).