У нас есть ситуация, когда наша производственная база данных - это Firebird, но она хотела бы выполнить встроенное тестирование интеграции с использованием SQLite. До сих пор единственными проблемами, с которыми мы сталкиваемся, являются различия в типах данных, используемых обеими базами данных.FluentNHibernate Table DataTypes (разные поставщики баз данных)
В качестве примера при сопоставлении каждого объекта домена с использованием 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-полей.
Я хотел бы получить совет относительно того, что мы можем сделать для преодоления этого недостатка, без дублирования кода сопоставления для разных баз данных.
поэтому нам нужно применить соглашение для CustomSqlType. Это звучит очень хорошая идея, так как мы могли бы легко обменяться между базами данных. Можете ли вы привести пример? Мы также расследуем. – Hugusta
Спасибо, Rich, мы внедрили соглашение, чтобы удовлетворить это. Отличный ответ! – Hugusta