NHibernate SchemaExport и Configure() catch-22

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

Проблема в том, что я не могу получить SchemaExport работать из-за странной проблемы с уловкой-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 ответ

Решение

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

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

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

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

Другие вопросы по тегам