一些细节:
NHibernate : 2.1.2.4000
Oracle Instant client : x64 11.2.0.2.0
Mono : Mono JIT compiler version 2.10.2
我目前正在努力使用Oracle和blob,因此只有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,除了路径之外。
任何帮助将不胜感激!
答案 0 :(得分:1)
不幸的是,Mono Oracle提供程序现在或多或少被放弃了(正如API Mono正在跟踪的Microsoft Oracle provider)。由于您已经为数据库引擎支付了大量资金,我建议您花一点钱购买商业支持的Oracle ADO.Net提供商。 dotConnect for Oracle正式支持Mono(我对它有非常好的经验),DataDirect ADO.NET Data Provider for Oracle是100%托管代码,因此它理论上应该与Mono一起使用。