У нас есть ситуация, когда нашей производственной базой данных является Firebird, но мы хотели бы провести внутреннее тестирование интеграции с использованием SQLite. Пока что единственные проблемы, с которыми мы сталкиваемся, - это различия в типах данных, используемых обеими базами данных.
Например, когда мы отображаем каждый объект домена с помощью FluentNHibernate, мы указываем тип столбца всякий раз, когда нам нужно явно указать его. Мы указываем CustomSqlType, используя свойство из следующего класса;
public static class DATATYPES
{
public const string SMALLINT = "SMALLINT";
public const string BOOLEAN = "CHAR(5)";
public const string INTEGER = "INTEGER";
public const string DECIMAL_MONEY = "DECIMAL(18,4)";
public const string DECIMAL_EXCHANGE_RATE = "DECIMAL(18,8)";
public const string DECIMAL_QUOTE_PRECISION = "DECIMAL(7,6)";
public const string DECIMAL_PERCENT = "DECIMAL(6,2)";
public const string BLOB_NULLABLE = "BLOB SUB_TYPE 1 SEGMENT SIZE 1 CHARACTER SET UTF8 COLLATE UTF8";
public const string BLOB_NOTNULL = "BLOB SUB_TYPE 1 SEGMENT SIZE 1 CHARACTER SET UTF8 NOT NULL COLLATE UTF8";
}
Из приведенного выше класса видно, что мы сопоставляем логические значения со столбцом CHAR (5) в базе данных Firebird. Теперь, когда мы пытаемся использовать то же отображение для SQLite, мы сталкиваемся с проблемами для полей BLOB и Boolean.
Мне бы хотелось получить несколько советов о том, что мы можем сделать, чтобы преодолеть этот недостаток, не дублируя код отображения для разных баз данных.