Я использую NHibernate v4 и .Net 4.6.1 в 32-разрядном приложении (использую SQL Server в моей среде разработки).
Мне нужно хранить большие файлы, используя Nhibernate (~ 1 ГБ).Я храню файлы в лениво загруженном столбце BLOB-объектов.
Моя проблема связана с исключениями "Недостаточно памяти", когда NHibernate пытается сохранить байтовый массив, представляющий мой файл.Я ищу решение, которое не использует никаких дополнительных сторонних библиотек.
Ниже вы можете найти код, который я использую для потоковой передачи данных в мое свойство, который прекрасно работает до постоянного использования.Когда сеанс пытается зафиксировать (даже когда используется только 600-мегабайтный файл), NHibernate выдает исключение OOM.
public class FileHoldingObject {
public virtual byte[] BinaryColumn {get;set;}
}
var myObject = new FileHoldingObject();
using (FileStream fs = File.OpenRead("C:\\MyBigFile.zip")) {
myObject.BinaryColumn= new byte[fs.Length];
int numBytesToRead = 125000;
int numBytesRead = 0;
while (numBytesToRead > 0) {
int n = fs.Read(myObject.BinaryColumn, numBytesRead, numBytesToRead);
if (n == 0)
break;
numBytesRead += n;
numBytesToRead -= n;
}
}
Session.Transaction.Commit(); // OOM thrown here
Единственный способ увидеть, как это обойти, - это передать файл в базу данных, номне не повезло найти способ сделать это с помощью готового NHibernate.Предложения будут оценены.