Я разрабатываю приложение, которое будет иметь эти классы:
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 должен будет поддерживать это.
До .NET 4 Entity Framework на мой вкус не была достаточно развитой. Кроме того, он не поддерживает POCO.
Без EF я бы выбрал NHibernate. Чтобы упростить настройку на основе кода, я бы также использовал Fluent NHibernate. NHibernate очень зрелый и пользуется большой поддержкой сообщества. Он имеет отличное средство для обновления схемы базы данных из последнего кода. Настоятельно рекомендуется.
Я не думаю, что какие-либо другие варианты являются серьезными. Entity Framework быстро приобретет популярность, потому что она встроена и серьезно продается MS. NHibernate останется жизнеспособным конкурентом, потому что он пользуется большой популярностью и зрелостью. Остальные будут постепенно отходить на второй план, пока ими не воспользуется лишь небольшое число ярых сторонников.
Я думаю, что здесь вы сравниваете два отдельных класса систем:
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.
См. DataObjects.Net: хотя это коммерческий, есть функции, которые вам нужны (например, обновление схемы).