.NET решение ORM с автоматической генерацией класса: Дозвуковой, Замок AR, …?

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

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

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

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


До сих пор я попробовал:

Дозвуковые 3.0

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

Что я не люблю:

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

Замок ActiveRecord

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

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

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

Быстрый NHibernate

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

Я пропустил что-то важное?

7
задан VladV 3 August 2010 в 07:10
поделиться

6 ответов

Q1) Если вы знаете максимальное количество столбцов, вы можете заполнить пустые записи NAN Кроме того, если все значения являются числовыми, вам действительно нужен «элемент №» столбца? Если да, вы можете использовать только «#», поэтому все данные являются числовыми.

Q2) Самый быстрый способ прочитать NUM. Данные из файла без MEX-файлов - CSVREAD. Я стараюсь избегать использования строк в файлах CSV, но если я должен, я использую свою функцию CSV2CELL:

http://www.mathworks.com/matlabcentral/fileeexchange/20135-Csv2cell

-121--3894551-

Несколько мыслей о вещах, которые вам не нравятся о дозвуковых:

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

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

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

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

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

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

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

NHIBERNATE не следит за активным рисунком записи, следует за репозитором шаблон.

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

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

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

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

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

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

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

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

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

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

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

1
ответ дан 7 December 2019 в 07:45
поделиться
  • Способен генерировать использование классов из схемы базы данных (поддержка SQL Server Достаточно),
  • поддержка картины Activerecord,
  • программа настраиваемо (через код или атрибуты, файлы HBM), бесплатно.
  1. Автогенераты Linq-to-SQL из схемы базы данных. Одна большая проблема заключается в том, что имена свойств являются строчными, поэтому вам нужен такой инструмент , чтобы переименовать их . Это не ограничивается SQL Server .

  2. Это своего рода поддерживает шаблон Activerecord - это очень близко.

  3. Классы настраиваются с помощью файла DBML, который является просто XML-файлом. Visual Studio генерирует файл Designer.cs , который позволяет добавлять в объекты, которые он производит, как они производится как Частичные классы .

Несколько других, чтобы посмотреть, кроме NH и дозвуковых:

  • Lightspeed - бесплатно в течение 8 объектов, ссылка показывает какой-то пример код. Вы должны определить отображения из таблиц в классы через интерфейс, хотя он не встречается 1)
  • llblgen - это не бесплатно
2
ответ дан 7 December 2019 в 07:45
поделиться

Что касается предыдущих сообщений CSLA, не является ORM (вы делаете сопоставление из БД на ваши бизнес-объекты вручную). CSLA, Nibernate, Subsonic etc не поддерживает шаблон активных записей.

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

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

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