Какие платформы ORM будут создавать и выполнять SQL DDL для вас? - PullRequest
1 голос
/ 19 августа 2011

Entity Framework Code First создаст для вас базу данных, если она не существует, и структурирует ее на основе ваших отображаемых объектов. Я считаю, что Roundhouse будет делать то же самое с файлами Fluent Mapping с использованием NHibernate.

Существуют ли другие ORM (или такие инструменты, как Roundhouse), которые позаботятся обо всем создании и выполнении SQL DDL?

Ответы [ 2 ]

3 голосов
/ 21 августа 2011

NHibernate не нуждается в Fluent Mappings для генерации схемы базы данных . Эта функция встроена в ядро ​​NHibernate:

new SchemaExport(_configuration).Execute(false, true, false);

Однако, по моему опыту, это в основном полезно для интеграционных тестов в памяти или начальных развертываний. Производственные базы данных должны быть обновлены . Если вы останетесь без дела, то вам нужно будет добавлять и удалять столбцы, таблицы и внешние ключи, не влияя на данные. В этом есть аспект преемственности и управления версиями. NHibernate знает только ваше текущее отображение. Например, он не знает, что 2 месяца назад вы сохранили имя и фамилию своего клиента в столбце с именем «CustomerName», а затем решили разделить его на два столбца «FirstName» и «LastName» (что, вероятно, является самым примитивным изменением может быть сделано). Задача NHibernate состоит в том, чтобы отобразить вашу текущую схему на объекты, а не помнить варианты моделирования данных, сделанные несколько лет назад.

По моему опыту, нет волшебного инструмента, который будет писать сценарии обновления, они должны быть написаны вручную или, по крайней мере, проверены разработчиком. Инструменты могут предоставить вам среду для выполнения этих сценариев, например RoundhouseE . Скотт Аллен имеет превосходную серию о подходе только вперед, однократный .

0 голосов
/ 19 августа 2011

hibernate делает, если вы установите hbm2ddl.auto на create или create-drop или update в файле конфигурации.Используя Java, то есть, я полагаю, то же самое для nHibernate.

Если ORM не выполняет ddl, нет особого смысла иметь его, по крайней мере, его ключевую особенность.Имхо.

...