NHibernate: Oracle & PostgreSql

本文关键字:PostgreSql amp Oracle NHibernate | 更新日期: 2023-09-27 18:26:57

我有一个将数据存储在数据库(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");
        ...
    }
}

A希望添加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
        }
    }

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

在不使用条件编译符号的情况下,还有其他方法可以做到这一点吗?我想要一个版本,可以同时使用两个数据库。

NHibernate: Oracle & PostgreSql

我会做一些类似的事情

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()
}

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