Свободный Nhibernate: Как изменить отображение поля в зависимости от базовой базы данных? - PullRequest
4 голосов
/ 19 апреля 2011

Я работаю над проектом с использованием Nhibernate 3.0 и Fluent Nhibernate.Мы используем SQL-Server 2008 для производственных целей.Для создания версий мы полагаемся на сгенерированные временные метки на стороне SQL-сервера.

Недавно я начал писать тесты репозитория, используя в памяти базу данных SQLite.К сожалению, SQLite не может генерировать временные метки, поэтому любая вставка завершается неудачно с нарушением ограничения.

Я хочу изменить отображение версий на управляемое Nhibernate, когда я компилирую свои отображения для базовой базы данных SQLite.Код, передающий эту идею, будет выглядеть примерно так:

public class CommonClassMap<T> : ClassMap<T> where T:Entity
{
    public CommonClassMap()
    {
        if (SQLITE)
        {
            Version(n => n.Version);
        }
        else
        {
            Version(n => n.Version).CustomSqlType("timestamp").UnsavedValue("null").CustomType("BinaryBlob").
                Generated.Always();
        }

К сожалению, мне не удалось найти какой-либо способ изменить сопоставления во время выполнения или прочитать информацию о базе данных из ClassMap.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 19 апреля 2011

Я должен иметь отдельные ClassMap для разных поставщиков БД.У меня, однако, нет необходимости изменять это во время выполнения, он настраивается один раз на все время жизни приложения.

Вы по-прежнему можете сохранять свою систему, но я полагаю, вам придется сохранитьSQLITE и подобные вещи самостоятельно.Также не стоит слишком полагаться на то, что код, который выполняется на одном поставщике БД (например, SQLite), будет работать и на других поставщиках, поэтому вы всегда должны включать тесты для SQL Server.

...