1

我有一个将数据存储在数据库(oracle)中的应用程序我有简单的模型

public class FileTemplate
{
    public string Xml { get; set; }
    ...
}

和类图

public class FileTemplateMap : ClassMap<FileTemplate>
{
    public FileTemplateMap()
    {
        Table("FILE_TEMPLATE");
        Map(f => f.Xml, "XML").CustomSqlType("NCLOB");
        ...
    }
}

一个想添加 PostgreSql 支持。但是 PostgreSql 没有 NCLOB 数据类型。我修改我的映射:

    public class FileTemplateMap : ClassMap<FileTemplate>
    {
        public FileTemplateMap()
        {
            Table("FILE_TEMPLATE");
#if POSTGRE
            Map(f => f.Xml, "XML").CustomSqlType("TEXT");
#else
            Map(f => f.Xml, "XML").CustomSqlType("NCLOB");
#endif
        }
    }

现在我必须通过定义条件编译符号(对于 postgresql)为 oracle 和 postgresql 进行不同的构建。使用 POSTGRE 编译符号构建的应用程序不适用于 oracle。

有没有其他方法可以在不使用条件编译符号的情况下做到这一点?我想要一个构建,它适用于两个数据库。

4

2 回答 2

1

我会做这样的事情

public static class CustomSqlTypeHelpers
{
    static readonly string _ClobSqlType;

    static CustomSqlTypeHelpers()
    {
        // Checks to validate config file setting ommitted
        _ClobSqlType = ConfigurationManager.AppSettings["ClobSqlType"];
    }

    public static PropertyPart LargeTextColumn(this PropertyPart pp)
    {
        return pp.CustomSqlType(_ClobSqlType);
    }
}

public FileTemplateMap()
{
    Table("FILE_TEMPLATE");
    Map(f => f.Xml, "XML").LargeTextColumn()
}
于 2013-08-09T12:57:00.750 回答
0

我做了一些不同的事情。这是一篇关于我的解决方案的文章:http: //beamyplum.blogspot.ru/2013/08/nhibernate.html

于 2013-08-11T14:01:37.847 回答