通过代码映射Nhibernate 3.2 sqlite blob字段与byte[]不工作

本文关键字:byte 字段 工作 blob sqlite 代码 映射 Nhibernate | 更新日期: 2023-09-27 17:54:32

我有一个非常简单的sqlite数据库,在表图像中有一个blob列用于存储图像,我使用的是Nhibernate 3.2,我从NuGet安装,我使用的是代码映射的新功能,下面是代码:

包:

   <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="Iesi.Collections" version="3.2.0.4000" targetFramework="net40" />
      <package id="NHibernate" version="3.2.0.4000" targetFramework="net40" />
    </packages>

模型类:

using DBAccessLayer.DataAccess;
using NHibernate.Type;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Media.Imaging;
namespace DBAccessLayer.Models
{
    public class Picture
    {
        public virtual int Id { get; set; }
        public virtual Byte[] BytesImage { get; set; }
        public virtual Place Place { get; set; }
        public virtual BitmapImage Image
        {
            get
            {
                return Tools.ParseBlob(BytesImage);
            }
        }
    }
}

Mapper类:

using DBAccessLayer.Models;
using NHibernate.Mapping.ByCode;
using NHibernate.Mapping.ByCode.Conformist;
using NHibernate.Type;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DBAccessLayer.Mappers
{
    public class PictureMap : ClassMapping<Picture>
    {
        public PictureMap()
    {
            Table("images");
            Id(x => x.Id, m =>
            {
                m.Generator(Generators.Identity);
                m.Column("id");
            });
            Property(x => x.BytesImage, m => { m.Column("image"); });
            ManyToOne(p => p.Place, map => map.Column("place_id"));
    }
    }
}

当我在控制台运行一个简单的查询来检索图片时,下一个nhibernate解析错误出现:

{"无法将类型Byte[]的字段image2_中的值强制转换为类型BinaryType。请检查以确保映射是正确的,并且您的数据提供程序支持此数据类型。"}
{"指定的类型转换无效。"}

我使用这个配置,它的工作没有映射blob字段,所以我不认为这是问题:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory name="NHibernate.Test">
    <property name="connection.driver_class">NHibernate.Driver.SQLite20Driver</property>
    <property name="connection.connection_string">Data Source=datacenter.db;Version=3</property>
    <property name="dialect">NHibernate.Dialect.SQLiteDialect</property>
    <property name="show_sql">true</property>
  </session-factory>
</hibernate-configuration>

我需要解决这个问题,所以我可以检索图像存储在我的数据库,任何帮助感谢。

通过代码映射Nhibernate 3.2 sqlite blob字段与byte[]不工作

试试这个博客:

  1. http://blog.calyptus。欧盟/seb/2009/03/large-object-storage-for-nhibernate-and-ddd-part-1-blobs-clobs-and-xlobs/
  2. http://kozmic.net/2009/08/13/adjusting-nhibernate-mapping-for-tests/
  3. http://nhibernate.info/blog/

他们应该是来解决问题的