【问题标题】:FluentNHibernate Table DataTypes (different database vendors)FluentNHibernate Table DataTypes(不同的数据库供应商)
【发布时间】:2010-12-30 02:35:51
【问题描述】:

我们的生产数据库是 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 和布尔字段的问题。

我想要一些关于我们可以做些什么来克服这个缺点的建议,而无需为不同的数据库复制映射代码。

【问题讨论】:

    标签: c# nhibernate sqlite fluent-nhibernate firebird


    【解决方案1】:

    在我的脑海中,不是在将属性映射到字段的每个点上显式定义列类型,而是将其合并到您将指向的约定类中吗?无论如何,这将是有益的(如果每个布尔值都映射到 CHAR(5),那么约定会比为每个布尔属性单独映射它更好)。然后你可以根据正在使用的数据库切换约定。

    【讨论】:

    • 所以我们需要为 CustomSqlType 应用一个约定。这听起来是一个非常好的主意,因为我们可以轻松地在数据库之间进行交换。你能举个例子吗?我们也在调查。
    • 感谢 Rich,我们实施了一个约定来满足这一点。很好的答案!
    猜你喜欢
    • 1970-01-01
    • 2015-03-31
    • 2014-11-13
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多