C# 将长类型列从Oracle映射到Nhibernate

C# 将长类型列从Oracle映射到Nhibernate,c#,oracle,hibernate,nhibernate,fluent-nhibernate,C#,Oracle,Hibernate,Nhibernate,Fluent Nhibernate,我在Oracle数据库中有一个表,其列为Long类型。在本专栏中,我们存储了一个长文本,我们无法将该类型更改为CLob,因为还有其他系统将其用作long类型。我正在编写一个新的应用程序来阅读本专栏,并使用NHibernate和Fluent NHibernate来映射执行一些任务 映射是正常的,除了这个列,其他一切都正常。当我从这个表中读取一个实体时,long列出现一个空字符串,如“” 我试过这些: Map(x => x.Query).Column("PNL_QUERY"); 及 及 及

我在Oracle数据库中有一个表,其列为
Long
类型。在本专栏中,我们存储了一个长文本,我们无法将该类型更改为
CLob
,因为还有其他系统将其用作
long
类型。我正在编写一个新的应用程序来阅读本专栏,并使用
NHibernate
Fluent NHibernate
来映射执行一些任务

映射是正常的,除了这个列,其他一切都正常。当我从这个表中读取一个实体时,
long
列出现一个空字符串,如

我试过这些:

Map(x => x.Query).Column("PNL_QUERY");

什么都不管用。当我从数据库中加载某个实体时,它们都会在查询字段中返回

如何在Oracle中映射这种类型的列

谢谢。

我找到了一个解决方案:

要使
LONG
列正常工作,在ado.net oracle提供程序中,我们必须将
OracleCommand.InitialLONGFetchSize
属性设置为
-1
。因此,我们必须从
OracleDataClientDriver
类重写Oracle驱动程序。大概是这样的:

使用NHibernate.Driver; 使用Oracle.DataAccess.Client

namespace MyProject
{
    public class OracleDriverExtended : OracleDataClientDriver
    {
        public override void AdjustCommand(System.Data.IDbCommand command)
        {
            OracleCommand cmd = command as OracleCommand;
            if (cmd != null)
                cmd.InitialLONGFetchSize = -1;
        }
    }
}
hibernate.cfg.xml
中,将此自定义驱动程序设置为
connection.driver\u类
属性:

<property name="connection.driver_class">
   MyProject.Data.OracleDriverExtended,
   MyProject
</property>

MyProject.Data.OracleDrive,
我的项目
现在,NHibernate可以从Oracle读取
LONG
类型


我在这里找到了解决方案

这是一个随机的想法,也许您应该尝试用自定义方言声明这个长类型,覆盖oracle方言中的RegisterLargeObjectTypeMappings()方法请参见:
Map(x => x.Query).Column("PNL_QUERY").CustomType("Long");
namespace MyProject
{
    public class OracleDriverExtended : OracleDataClientDriver
    {
        public override void AdjustCommand(System.Data.IDbCommand command)
        {
            OracleCommand cmd = command as OracleCommand;
            if (cmd != null)
                cmd.InitialLONGFetchSize = -1;
        }
    }
}
<property name="connection.driver_class">
   MyProject.Data.OracleDriverExtended,
   MyProject
</property>