将长类型列从 Oracle 映射到 Nhibernate

本文关键字:映射 Nhibernate Oracle 类型 | 更新日期: 2023-09-27 18:32:49

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

映射没问题,除此列外,一切正常。当我从此表中读取实体时,long列出现一个空字符串,如 "" .

我试过这些:

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

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

Map(x => x.Query).Column("PNL_QUERY").CustomType("StringClob")
                                     .CustomSqlType("Long");

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

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

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

谢谢。

将长类型列从 Oracle 映射到 Nhibernate

我找到了一个解决方案:

要使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_class 属性:

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

现在,NHibernate可以从Oracle读取LONG类型。

我在这里找到了解决方案 http://sonyarouje.com/2012/11/07/nhibernate-and-oracle-long-varchar-field/