Не уверен, что задаю правильный вопрос, поэтому, пожалуйста, потерпите меня! Немного NHibernate нуб.
Мы используем Fluent NH и используем следующую схему генерации идентификаторов для всех таблиц
public class IdGenerationConvention : IIdConvention
{
public void Apply(IIdentityInstance instance)
{
var where = string.Format("TableKey = '{0}'", instance.EntityType.Name);
instance.GeneratedBy.HiLo("HiloPrimaryKeys", "NextHighValue", "1000", x => x.AddParam("where", where));
}
}
У нас есть SQL-скрипт, который генерирует таблицу HiloPrimaryKeys
и заполняет ее данными, которые запускаются во время развертывания. Это работает нормально.
Я сейчас пытаюсь написать модульные тесты, чтобы проверить наш уровень персистентности, в идеале, используя SQLite в конфигурации памяти для скорости. Вот как я настраиваю NH для тестов:
[SetUp]
public void SetupContext()
{
config = new SQLiteConfiguration()
.InMemory()
.ShowSql()
.Raw("hibernate.generate_statistics", "true");
var nhConfig = Fluently.Configure()
.Database(PersistenceConfigurer)
.Mappings(mappings =>
mappings.FluentMappings.AddFromAssemblyOf<DocumentMap>()
.Conventions.AddFromAssemblyOf<IdGenerationConvention>());
SessionSource = new SessionSource(nhConfig);
Session = SessionSource.CreateSession();
SessionSource.BuildSchema(Session);
}
Проблема в том, что я не знаю, как сообщить NHibernate о нашем сценарии развертывания, чтобы он генерировал правильную схему и начальные данные во время тестов.
Конкретная проблема, с которой я сталкиваюсь, заключается в выполнении следующего теста PersistenceSpecification
:
[Test]
public void ShouldAddDocumentToDatabaseWithSimpleValues()
{
new PersistenceSpecification<Document>(Session)
.CheckProperty(x => x.CreatedBy, "anonymous")
.CheckProperty(x => x.CreatedOn, new DateTime(1954, 12, 23))
.CheckProperty(x => x.Reference, "anonymous")
.CheckProperty(x => x.IsMigrated, true)
.CheckReference(x => x.DocumentType, documentType)
.VerifyTheMappings();
}
Который выдает следующее исключение:
TestCase ... failed:
Execute
NHibernate.Exceptions.GenericADOException:
could not get or update next value[SQL: ]
---> System.Data.SQLite.SQLiteException: SQLite error
no such column: TableKey
Итак, мой вывод заключается в том, что он не запускал сценарий развертывания при проверке спецификации персистентности.
Существует ли существующее решение этой ситуации? Кажется, мой Google-фу бросил меня на этом.