Свободное владение NHibernate - Спецификация PersistenceSpecification схемы HiLo

Не уверен, что я задаю правильный вопрос, так что терпите меня! Немного нуба 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()
            .Conventions.AddFromAssemblyOf());

    SessionSource = new SessionSource(nhConfig);
    Session = SessionSource.CreateSession();
    SessionSource.BuildSchema(Session);
}

Проблема в том, что я не знаю, как сообщить NHibernate о нашем сценарии развертывания, чтобы он генерировал правильную схему и исходные данные во время тестов.

Конкретная проблема, с которой я сталкиваюсь, возникает при выполнении следующего теста PersistenceSpecification :

[Test]
public void ShouldAddDocumentToDatabaseWithSimpleValues()
{
    new PersistenceSpecification(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

Итак, я пришел к выводу, что он не запускал сценарий развертывания при проверке спецификация настойчивости

Есть ли существующее решение этой ситуации? Мой гугл-фу, кажется, бросил меня на этом.

5
задан Mark Pim 12 April 2011 в 08:05
поделиться