Fluent NHibernate规范,NHibernate 3.1,延迟加载和sql映像列类型

Fluent NHibernate规范,NHibernate 3.1,延迟加载和sql映像列类型,nhibernate,fluent-nhibernate,nhibernate-mapping,bytearray,lazy-loading,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,Bytearray,Lazy Loading,延迟加载类型为byte[]的属性是否存在已知问题?我在SQLServer2008DB上有一个image列,我正试图将它映射到一个类的byte[]属性中。因为我不想总是加载它,所以我将其配置为使用延迟加载。代码如下: public class Documento : Entity, IHasAssignedId<Int32> { public virtual Byte[] Bytes { get; private set; } //...more properties

延迟加载类型为byte[]的属性是否存在已知问题?我在SQLServer2008DB上有一个image列,我正试图将它映射到一个类的byte[]属性中。因为我不想总是加载它,所以我将其配置为使用延迟加载。代码如下:

public class Documento : Entity, IHasAssignedId<Int32> {
    public virtual Byte[] Bytes { get; private set; }
    //...more properties
}
公共类文档o:Entity,IHasAssignedId{
公共虚拟字节[]字节{get;private set;}
//…更多的财产
}
以下是映射:

Map( doc => doc.Bytes, "Documento" )
            .CustomSqlType( "image" )
            .CustomType<Byte[]>(  )
            .LazyLoad(  )
            .Not.Nullable( );
Map(doc=>doc.Bytes,“Documento”)
.CustomSqlType(“图像”)
.CustomType()
.LazyLoad()
.Not.Nullable();
现在的问题是,当我试图用PersistenceSpecification检查映射时,我得到一个异常,它说:

NHibernate.PropertyAccessException:无效强制转换(检查映射中的属性类型不匹配);Sra.Assistencias.Documento的设定者 ---->System.InvalidCastException:无法将“System.object”类型的对象强制转换为“System.Byte[]”类型


如果我配置属性,使其不使用延迟加载,或者如果我将其类型更改为Object(保持db映射不变),则一切正常。有什么想法吗?

我认为问题来自您的映射,而不是延迟加载本身。以下是我在Fluent NHibernate中映射图像类型的步骤:

interface IEmployee
{
    int Id { get; }
    string Name { get; }
    byte[] Image { get; set; }
}

public class EmployeeMap : ClassMap<IEmployee>
{
    public EmployeeMap()
    {
        Id(x => x.Id).GeneratedBy.Identity();
        Map(x => x.Name);
        Map(x => x.Image).CustomType("BinaryBlob");
    }
}
接口i员工
{
int Id{get;}
字符串名称{get;}
字节[]图像{get;set;}
}
公共类EmployeeMap:ClassMap
{
公共雇员地图()
{
Id(x=>x.Id).GeneratedBy.Identity();
Map(x=>x.Name);
Map(x=>x.Image).CustomType(“二进制blob”);
}
}

其中“Image”列是使用SQL Server 2008的
Image
类型。

Hello@binaryhowl。下面是我正在使用的映射:Map(doc=>doc.Bytes,“Documento”).CustomSqlType(“BinaryBlob”).CustomType().LazyLoad().Not.Nullable();顺便说一句,我也尝试过在sql类型中使用“image”,但它仍然不起作用……还有什么想法吗?谢谢。你能试着把你的映射改成我建议的吗?