我们的生产数据库是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";
}
您可以从上面的类中看到,我们将布尔值映射到Firebird数据库中的CHAR(5)列。现在我们正在尝试对SQLite使用相同的映射,我们遇到了BLOB和布尔字段的问题。
我想就如何克服这个缺点做一些建议,而不重复不同数据库的映射代码。
答案 0 :(得分:0)
在我的头脑中,您是否可以将此属性合并到您指向的约定类中,而不是在将属性映射到字段的每个点显式定义列类型?无论如何,这都是有益的(如果每个布尔值都映射到一个CHAR(5),那么惯例就会比为每个布尔属性不经意地映射它更好)。然后你可以根据使用的数据库切换约定。