NHibernate SchemaExport и Configure () catch-22
-
06-07-2019 - |
Вопрос
Я хочу использовать DDD в новом проекте и сначала смоделировать мои классы, затем сгенерируйте схему базы данных на основе библиотеки классов. Я планирую сделать это с помощью инструмента NHibernate hbm2ddl SchemaExport
.
Проблема в том, что я не могу заставить работать SchemaExport
из-за странной проблемы catch-22, в которую он меня помещает. Для SchemaExport
требуется Объект конфигурации
, для которого требуется действительный файл конфигурации NHibernate, а также набор сопоставлений базы данных.
Подвох 22 здесь в том, что когда я выполняю Configure (), он жалуется на " Не удалось определить имя таблицы для сущности 'MyEntity'; удалите атрибут 'table' или присвойте ему значение. "
Таким образом, метод Configure ()
требует, чтобы таблица существовала, тогда как предполагается, что SchemaExport
создать его на основе Configuration
, которую я не могу создать, потому что таблица не существует.
Итак, как же я должен создать действительную конфигурацию NHibernate
, содержащую сопоставления, необходимые для того, чтобы SchemaExport
действительно делал что-то полезное, не имея Configure ()
бросаете и жалуетесь, что не можете найти таблицы, которые должны быть созданы с помощью SchemaExport
? Есть ли "режим"? Я могу установить объект Configuration
, чтобы он не проверял базу данных на наличие заданных таблиц, или мне нужно что-то еще сделать?
Решение
Можете ли вы опубликовать свой файл конфигурации?
Я использую этот метод все время без таблиц и могу создавать схемы на лету. Я предполагаю, что у вас может быть что-то не так в одном из ваших файлов .hbm. Попробуйте сократить вашу схему до 1 таблицы, заставить ее работать, а затем создайте ее оттуда. В качестве ссылки, вот код, который я использую для генерации схемы БД:
var cfg = new Configuration();
cfg.Configure();
var schema = new SchemaExport(cfg);
schema.Create(true, true);
Это также подтолкнет скрипт к консоли для вас, чтобы вы могли увидеть, какой SQL генерируется на основе базы данных.