2010-12-30 1 views
1

У нас есть ситуация, когда наша производственная база данных - это 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-полей.

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

ответ

0

В верхней части моей головы вместо явного определения типа столбца в каждой точке вы сопоставляете свойство с полем, не могли бы вы объединить это в класс конвенций, на который вы указали бы? Это было бы выгодно независимо (если каждое булевское отображение сопоставляется с CHAR (5), соглашение будет лучше, чем его отображение в любом случае для любого логического свойства). Затем вы можете просто переключить соглашения на основе используемой БД.

+0

поэтому нам нужно применить соглашение для CustomSqlType. Это звучит очень хорошая идея, так как мы могли бы легко обменяться между базами данных. Можете ли вы привести пример? Мы также расследуем. – Hugusta

+0

Спасибо, Rich, мы внедрили соглашение, чтобы удовлетворить это. Отличный ответ! – Hugusta

 Смежные вопросы

  • Нет связанных вопросов^_^