Решение .NET ORM с классом автогенерации: Subsonic, Castle AR, ...? - PullRequest
7 голосов
/ 11 января 2010

Раньше я работал с пользовательской библиотекой отображения данных, и сейчас я пытаюсь перейти на более распространенное решение ORM.

После некоторых экспериментов я уточнил свои требования к следующему:

  • способен генерировать используемые классы из схемы базы данных (достаточно поддержки SQL Server),
  • поддержка шаблона ActiveRecord,
  • программно настраивается (с помощью кода или атрибутов, без файлов HBM),
  • свободный.

Не могли бы вы порекомендовать один?


Пока я пробовал:

Дозвуковой 3,0

Тот, который мне сейчас нравится больше всего, так как он кажется хорошим балансом между функциональностью и простотой.

Что мне не нравится:

  • использует имена IQueryable <> и множественное число для обоих концов отношения один ко многим - мне это кажется довольно нелогичным;
  • генерирует один файл для всех классов - как тысяча строк на класс, у меня плохое предчувствие, что файлы кода настолько велики;
  • Обработка T4 вызывается автоматически, поэтому база данных с обновленной схемой должна быть доступна постоянно .

Замок ActiveRecord

CastleAR с надстройкой ActiveWriter - почти то, что мне нужно, но код ActiveWriter не идеален (кажется, свойства Nullable <> не поддерживаются, и реализация по умолчанию «один ко многим» не работает), и я не мог не могу найти, как исправить этот код вручную.

Darkside GeneratorStudio создает лучший код - правильные определения, по одному файлу на объект - хотя он использует загадочные имена, такие как RefclassIdRefclass . Лично мне больше нравится Studio addin, чем отдельное приложение, но это, безусловно, незначительная проблема.

В дистрибутиве CastleAR упаковано около двадцати файлов; хотя это не проблема само по себе, но ощущается как лишний вес. Не нужно ли мне слишком много эзотерических знаний о NHibernate и других вещах?

Свободный NHibernate

Широко рекомендуется, но я не смог найти генератор кода для него.

Я что-то упустил?

Ответы [ 6 ]

3 голосов
/ 11 января 2010

NHibernate не следует шаблону активной записи, он следует шаблону репозитория.

Целью FluentNHibernate является необходимость поддержки файлов отображения, генерации кода и т. Д. Он поддерживает свободно определяемые эквиваленты C # файлов NHibernate HBM, которые очень удобны и более удобны в обслуживании, чем XML, однако гораздо более сильным аспектом являются его возможности автоматического сопоставления. Если ваша база данных разработана со строго определенными соглашениями, можно настроить FNH так, чтобы она генерировала правильное отображение всех объектов вашего домена правильно в структуру базы данных.

Если вы более заинтересованы в проектировании базы данных и в том, что она диктует модель вашего домена (это может меня расстроить), здесь есть вопрос, посвященный Генераторам NHibernate

Ответ на ваш комментарий: Сам NHibernate не изменяет саму базу данных, однако в нее включен служебный класс SchemaExport, который предоставляет фабричный метод Create. Вы можете использовать это, чтобы сгенерировать операторы SQL, необходимые для создания вашей базы данных так, как NHibernate видит вашу структуру отношений. И при желании можно либо напрямую работать с базой данных, либо записать в консоль.

Эта утилита очень полезна для прямого создания вашего домена в вашей базе данных, сейчас я пишу свою базу данных для всех моих новых приложений. Я все еще работаю над выяснением лучшего способа поддержки версий базы данных. В худшем случае сценарием будет просто SC SQL-вывода и требуются комментарии для каждой строки, которая изменяет схему, чтобы иметь свои конкретные операторы обновления / удаления для достижения результата. Это позволило бы легко переходить вперед / назад по версии или просто выполнять весь сценарий, чтобы создать БД с нуля.

Если вы идете исключительно для обратного отображения, должны быть доступны инструменты для генерации соответствующего HBM, который ваша база данных должна сопоставить с эквивалентными классами (т. Е. Если бы вы написали эти классы изначально в вашей доменной модели, он экспортировал бы соответствующую схему вашей текущей базы данных)

2 голосов
/ 23 января 2010
  • возможность генерировать используемые классы из схемы базы данных (поддержка SQL Server достаточно)
  • поддержка шаблона ActiveRecord,
  • программно настраивается (с помощью кода или атрибутов, без файлов HBM), бесплатно.
  1. Linq-to-SQL автоматически генерируется из схемы базы данных. Одна большая проблема заключается в том, что имена свойств в нижнем регистре, поэтому вам нужен инструмент типа этот , чтобы переименовать их. Не ограничивается SQL Server .

  2. Он поддерживает шаблон ActiveRecord - это очень близко.

  3. Классы настраиваются через файл dbml, который является просто файлом XML. Visual Studio создает файл designer.cs, который позволяет добавлять к создаваемым объектам, как они создаются как partial классы.

Несколько других, кроме NH и Subsonic, которые можно посмотреть:

  • Lightspeed - бесплатно для менее чем 8 объектов, ссылка показывает пример кода. Вы должны определить отображения из таблиц в классы через интерфейс, хотя он не соответствует 1)
  • LLBlgen - это не бесплатно
1 голос
/ 12 января 2010

Мы используем CodeSmith для генерации кода и настоятельно рекомендуем его в качестве инструмента генерации.

Если вы посмотрите на CodeSmith, он поддерживает различные шаблоны ORM / Business Object.

Мы внедрили наши собственные CSLA (см. http://www.lhotka.net/) шаблоны несколько лет назад, чтобы разобраться с CSLA, который представляет собой нечто большее, чем просто ORM. CSLA великолепен, работает очень хорошо и обладает высокой масштабируемостью. Теперь мы создали наш собственный фреймворк и отбросил базовый фреймворк CSLA, так как нам не требовались все функции, и он стал немного проще.

1 голос
/ 11 января 2010

Несколько мыслей о том, что вам не нравится в SubSonic:

  • использует имена IQueryable <> и множественное число для обоих концов отношения один-ко-многим - это кажется довольно нелогично для меня;

Правда, я согласен, что это очень нелогично, и я так и не понял, почему это так, но вы можете довольно легко изменить шаблоны, чтобы это исправить.

  • генерирует один файл для всех классов - как тысяча строк на класс, у меня плохое предчувствие, что файлы кода настолько велики;

Вы могли бы подумать, что это может вызвать проблемы, но я еще не сталкивался с подобными проблемами, и я еще не видел ни одного сообщения о стекапровороте.

  • Обработка T4 запускается автоматически, поэтому база данных с обновленной схемой должна быть доступна постоянно.

Он вызывается только автоматически, если вы редактируете файлы t4, поэтому на самом деле вам нужна только современная схема, доступная при внесении изменений в шаблоны.

0 голосов
/ 27 января 2010

Относительно предыдущих сообщений CSLA не является ORM (вы делаете отображение из БД в ваши бизнес-объекты вручную). CSLA, NHibernate, subsonic и т. Д. Не поддерживают шаблон активных записей.

Если вы рассматриваете фреймворки, которые не поддерживают шаблон Active Records, я бы подумал, что Habanero (http://www.habanerolabs.com/) это открытый исходный код и позволяет вам создавать ваши бизнес-объекты либо с помощью конфигурации XML, либо с помощью кода. Habanero - это гораздо больше, чем ORM, и он имеет расширенную поддержку домена (бизнес-объект) с мощной объектной моделью для представления объектов вашего домена (бизнес-объекты).

0 голосов
/ 12 января 2010

Интересно, может ли старый SubSonic 2.2 лучше соответствовать вашим требованиям? Он генерирует отдельные классы для каждой таблицы, восстанавливается только тогда, когда вы сообщаете об этом, и поддерживает шаблон ActiveRecord. Подробности смотрите в документах на http://subsonicproject.com/docs/Main_Page

...