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。
在不使用条件编译符号的情况下,还有其他方法可以做到这一点吗?我想要一个版本,可以同时使用两个数据库。
我会做一些类似的事情
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