【问题标题】:Fluent NHibernate spec, NHibernate 3.1, lazy loading and sql image column typeFluent NHibernate 规范,NHibernate 3.1,延迟加载和 sql 图像列类型
【发布时间】:2011-06-20 20:54:47
【问题描述】:

延迟加载类型为 byte[] 的属性是否存在任何已知问题?我在 sql server 2008 db 上有一个图像列,我试图将它映射到一个类的 byte[] 属性中。因为我不想总是加载它,所以我已经对其进行了配置,以便它使用延迟加载。代码如下:

public class Documento : Entity, IHasAssignedId<Int32> {
    public virtual Byte[] Bytes { get; private set; }
    //...more properties
}

这是映射:

Map( doc => doc.Bytes, "Documento" )
            .CustomSqlType( "image" )
            .CustomType<Byte[]>(  )
            .LazyLoad(  )
            .Not.Nullable( );

现在,问题是当我尝试使用 PersistenceSpecification 检查映射时,我得到一个异常,上面写着:

NHibernate.PropertyAccessException : Invalid Cast(检查您的映射是否有属性类型不匹配); Sra.Assistencias.Documento 的二传手 ----> System.InvalidCastException:无法将“System.Object”类型的对象转换为“System.Byte[]”类型。

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

【问题讨论】:

    标签: nhibernate fluent-nhibernate nhibernate-mapping bytearray lazy-loading


    【解决方案1】:

    我认为问题出在您的映射上,而不是延迟加载本身。这是我在 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");
        }
    }
    

    其中“图像”列是Image 类型,使用 SQL Server 2008。

    【讨论】:

    • 你好@binaryhowl。这是我正在使用的映射: Map( doc => doc.Bytes, "Documento" ) .CustomSqlType( "BinaryBlob" ) .CustomType( ) .LazyLoad( ) .Not.Nullable( );顺便说一句,我也尝试过对 sql 类型使用“图像”,但它仍然无法正常工作......还有什么想法吗?谢谢。
    • 您可以尝试将映射更改为我建议的映射吗?
    猜你喜欢
    • 2013-12-10
    • 2012-04-29
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多