NHibernate SchemaExport и Configure () catch-22 - PullRequest
3 голосов
/ 21 июня 2009

Я хочу использовать DDD в новом проекте и сначала смоделировать мои классы, а затем сгенерировать схему базы данных на основе библиотеки классов. Я планирую сделать это с помощью инструмента NHibernate hbm2ddl SchemaExport.

Проблема в том, что я не могу заставить SchemaExport работать из-за странной проблемы catch-22, которую он ставит. SchemaExport требует объект Configuration, для которого сам по себе требуется действительный файл конфигурации NHibernate как а также набор сопоставлений базы данных.

Подвох-22 здесь заключается в том, что когда я выполняю Configure (), он жалуется "Could not determine the name of the table for entity 'MyEntity'; remove the 'table' attribute or assign a value to it." Так что метод Configure() требует, чтобы таблица существовала, в то время как SchemaExport должен создавать ее на основе Configuration что я не могу создать, потому что таблица не существует.

Итак, как же я должен создать действительный NHibernate Configuration, содержащий сопоставления, необходимые для SchemaExport, чтобы на самом деле сделать что-то полезное без броска Configure() и жалоб, что он не может найти таблицы, которые быть создан с SchemaExport? Есть ли «режим», в котором я могу установить объект Configuration, чтобы он не проверял базу данных на наличие заданных таблиц, или мне нужно что-то еще сделать?

1 Ответ

9 голосов
/ 21 июня 2009

Можете ли вы опубликовать свой файл конфигурации?

Я использую этот метод все время без таблиц и могу генерировать схему на лету. Я предполагаю, что у вас может быть что-то не так в одном из ваших файлов .hbm. Попробуйте сократить вашу схему до 1 таблицы, заставить ее работать, а затем создайте ее оттуда. Для справки вот код, который я использую для генерации схемы БД:

    var cfg = new Configuration();
    cfg.Configure();
    var schema = new SchemaExport(cfg);
    schema.Create(true, true);

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

...