Свободные спецификации NHibernate, NHibernate 3.1, ленивая загрузка и тип столбца sql image - PullRequest
0 голосов
/ 20 июня 2011

Известны ли проблемы с отложенной загрузкой свойства, тип которого является байтом []? У меня есть столбец изображения на SQL Server 2008 дБ, и я пытаюсь отобразить его в свойство байта [] класса. Поскольку я не хочу загружать его всегда, я настроил его так, чтобы он использовал отложенную загрузку. Вот код:

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 (проверьте соответствие в соответствии с типами свойств); сеттер Срас.Ассистенсии.Документо ----> System.InvalidCastException: Невозможно привести объект типа 'System.Object' к типу 'System.Byte []'.

Если я настрою свойство таким образом, чтобы оно не использовало отложенную загрузку, или если я изменил его тип на Object (оставив отображение БД без изменений), все работает нормально. Есть идеи?

1 Ответ

1 голос
/ 20 июня 2011

Я думаю, что проблема в вашем отображении, а не в ленивой загрузке.Вот я отображаю типы изображений в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...