Я унаследовал несколько отображений Fluent NHibernate, которые все в настоящее время работают в проекте, в котором они находятся (т.е. приложение использует их и работает). Сейчас я пытаюсь построить интеграционные тесты для некоторых новых отображений и, таким образом, использовать все их - старые и новые - для генерации схемы, используя
new SchemaExport(Container.Resolve<Configuration>()).Create(true, true);
Однако выполняемый сценарий SQL имеет недопустимый код. Кажется, большая часть проблемы проистекает из строк, как в одном из этих двух случаев:
// x.Map is string
Map(x => x.Map).Column("Karta").Not.Nullable().Default("False");
// x.Active is bool
Map(x => x.Active).Column("Aktiv").Not.Nullable().Default("True");
Что происходит, в операторе, который создает эту таблицу, строка, соответствующая приведенному выше отображению, выглядит следующим образом (на самом деле они для разных типов и в разных таблицах):
Karta NVARCHAR(255) default False not null,
Aktiv BIT default True not null,
, где (очевидно) False
не работает, поскольку переменная с таким именем отсутствует, а логические значения не существуют в SQL Server.
Как мне решить эту проблему?
Я не хочу менять сопоставления, так как существует большое приложение, которое использует их и зависит от них - я не знаю (и не хочу сейчас выяснять) какие тонкие ошибки вводятся, если я, скажем, удаляет спецификацию по умолчанию. Если я смогу изменить "False"
и "True"
на что-то, что работает, то это вполне нормально - при условии, что совершенно очевидно, что это не изменит никакого поведения в другом месте.