NHibernate "Invalid Cast (проверьте соответствие на предмет несоответствия типов свойств); установщик System.Object" - PullRequest
2 голосов
/ 29 июня 2011

Я обновлял установку NHibernate (все еще был на 1.2!). Все было хорошо, пока я не попытался установить перехватчик. Если я добавляю Перехватчик к вызову OpenSession (), я получаю эту ошибку при попытке загрузить сущность из БД:

"Invalid Cast (проверьте соответствие на предмет несоответствия типов свойств); установщик System.Object"

Если перехватчик отсутствует, эта ошибка не возникает.

Перехватчик очень прост, и на самом деле я закомментировал все, чтобы протестировать:

public class Interceptor : EmptyInterceptor
{
    public override void AfterTransactionBegin(ITransaction tx)
    {            
    }

    public override void AfterTransactionCompletion(ITransaction tx)
    {            
    }

    public override void BeforeTransactionCompletion(ITransaction tx)
    {            
    }

    //public override int[] FindDirty(object entity, object id, object[] currentState, object[] previousState, string[] propertyNames, IType[] types)
    //{            
    //}

    //public override object GetEntity(string entityName, object id)
    //{            
    //}

    //public override string GetEntityName(object entity)
    //{            
    //}

    public override object Instantiate(string entityName, EntityMode entityMode, object id)
    {
        //((EntityBase)entity).Instantiate(entityName, entityMode, id)
        return new object();
    }

    //public override bool? IsTransient(object entity)
    //{            
    //}

    public override void OnCollectionRecreate(object collection, object key)
    {            
    }

    public override void OnCollectionRemove(object collection, object key)
    {            
    }

    public override void OnCollectionUpdate(object collection, object key)
    {            
    }

    public override void OnDelete(object entity, object id, object[] state, string[] propertyNames, IType[] types)
    {
        //((EntityBase)entity).OnDelete(entity, id, state, propertyNames, types);
    }

    //public override bool OnFlushDirty(object entity, object id, object[] currentState, object[] previousState, string[] propertyNames, IType[] types)
    //{            
    //}

    public override bool OnLoad(object entity, object id, object[] state, string[] propertyNames, IType[] types)
    {
        //if (entity.GetType().FullName.Equals("EntityBase"))
        //    return ((EntityBase)entity).OnLoad(entity, id, state, propertyNames, types);
        //else
            return false;
    }

    //public override NHibernate.SqlCommand.SqlString OnPrepareStatement(NHibernate.SqlCommand.SqlString sql)
    //{            
    //}

    public override bool OnSave(object entity, object id, object[] state, string[] propertyNames, IType[] types)
    {
        //return ((EntityBase)entity).OnSave(entity, id, state, propertyNames, types);
        return true;
    }

    public override void PostFlush(System.Collections.ICollection entities)
    {            
    }

    public override void PreFlush(System.Collections.ICollection entities)
    {            
    }

    public override void SetSession(ISession session)
    {
    }
}

Таким образом, я совершенно сбит с толку. Как я уже сказал, с Interceptor он выдает ошибки при загрузке и гидратации объектов (после срабатывания события OnLoad), без Interceptor все нормально. Я использую nHibernate 3.2.0.2001 с .Net4 против SQL Server 2008.

Любая помощь приветствуется! Ben


К сожалению, я не смог решить эту проблему, мне пришлось переключиться на Linq-SQL из-за этой конкретной проблемы, и я не смог найти решение в сроки, необходимые для использования этих шаблонов. Поэтому я не могу предоставить больше информации в настоящее время.

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