Oracle客户端Blob 10K限制与NHibernate和Mono

本文关键字:NHibernate Mono 客户端 Blob 10K Oracle | 更新日期: 2023-09-27 18:06:11

一些细节:

NHibernate : 2.1.2.4000
Oracle Instant client : x64 11.2.0.2.0
Mono : Mono JIT compiler version 2.10.2

我目前正在与Oracle和blobs作斗争,其中只有10K的blob插入到数据库中。虽然这在Windows上可以工作,但在Linux上似乎有些不同。查看sql,一切似乎都很好。以下是截断的sql语句:

INSERT INTO Voters (Photo) VALUES (:p1);:p1 = 0x424DF627090000000000360000002800000090.... 

hibernate映射如下

和下面的类

public partial class Voter : BusinessBase<long>
{
    #region Declarations
    private byte[] _photo = null;
    #endregion
    public virtual byte[] Photo
    {
        get { return _photo; }
        set { _photo = value; }
    }
}

保存选民对象的代码如下所示

Voter entityVoter = Voter.copyFrom(record.TRANSACTION);
IVoterManager managerVoter = ManagerFactory.Instace.GetVoterManager(managerBulkImport.Session);
managerVoter.SaveOrUpdate(entityVoter);
File.WriteAllBytes("/home/user/voter" + entityVoter.Id + ".bmp", entityVoter.Photo);

对象保存后写入磁盘的图像也是正确的,这使我认为问题可能是oracle客户端?正如我说过的,这段代码在windows上工作,除了路径。

任何帮助都将非常感激!

Oracle客户端Blob 10K限制与NHibernate和Mono

不幸的是,Mono Oracle提供程序现在或多或少被抛弃了(就像Mono跟踪其API的Microsoft Oracle提供程序一样)。既然您已经为数据库引擎支付了大笔费用,我建议您再多花一点钱,购买一个商业支持的Oracle ADO。净提供者。Oracle的dotConnect正式支持Mono(我有很好的使用经验)和DataDirect ADO。Oracle的。NET数据提供程序是100%托管代码,所以理论上它应该也能与Mono一起工作。