2010-12-03 17 views
8

Ejecutando VS2003, nHB 3.0.0.3001, intentando ejecutar una prueba unitaria a través de Gallio 3.2. El código es de la primera sesión de "Summer of nHibernate". Recibo el siguiente error al intentar ejecutar la prueba.nHibernate: no se puede ubicar la persistencia

NHibernate.HibernateException: Unable to locate persister: DataTransfer.Customer 
TargetSite: Void OnLoad(NHibernate.Event.LoadEvent, NHibernate.Event.LoadType) 
HelpLink: null 
at NHibernate.Event.Default.DefaultLoadEventListener.OnLoad(LoadEvent event, LoadType loadType) 
at NHibernate.Impl.SessionImpl.FireLoad(LoadEvent event, LoadType loadType) 
at NHibernate.Impl.SessionImpl.Get(String entityName, Object id) 
at NHibernate.Impl.SessionImpl.Get(Type entityClass, Object id) 
at NHibernate.Impl.SessionImpl.Get[T](Object id) 
at DataAccessLayer.NhibernateDataProvider.GetCustomerById(Int32 customerId) 

Mi conjetura muy inculta es que no se puede ver la clase de Cliente. Pero tanto la prueba unitaria como las capas de acceso a datos tienen una referencia al ensamblaje DataTransfer que contiene la clase Cliente. La clase de Cliente es pública y todas las propiedades son públicas virtuales.

El archivo de configuración nHB está en el directorio y el archivo de asignación del Cliente es un recurso incrustado. Parece fallar en la línea :

return session.Get<Customer>(customerId); 

Respuesta

23
  1. Asegúrese de que el archivo de asignación se llama * .hbm.xml

  2. Asegúrese de que está establecido en un recurso incrustado.

  3. Si estos errores, depuración y cuando falla, atrapa la excepción y mira la InnerException - NHibernate tiene fantásticos mensajes de error ocultos allí.

Esperanza esos thigs ayudan a cabo - de lo contrario podemos ver en algunas otras opciones (pero 1 y 2 de resolver el 90% de los problemas persister)

+0

FYI - para el ítem 2, mira las propiedades del archivo XML en el estudio, es el cuadro combinado superior (creo que el valor predeterminado es No copiar pero no tengo Studio abierto). –

+2

Sí, el archivo de asignación se denominó hbn.xml no hbm.xml, gracias por la ayuda. –

+1

También agregaría un 2.5 a su lista, asegúrese de que está cargando el conjunto de asignación al crear su fábrica. –

0

estoy usando ActiveRecord para el mapeo de entidad, consiguió el mismo error cuando trató de utilizar ISession.Get, en lugar de utilizar la configuración para la recuperación de la sesión, así:

     ISession session = new NHibernate.Cfg.Configuration() 
        .Configure() 
        .AddAssembly(typeof(Account).Assembly) 
        .SetInterceptor(new SqlStatementInterceptor()) 
        .BuildSessionFactory().OpenSession(); 

lo cambié a trabajar a través de ActiveRecordMediator:

    ISession session = Castle.ActiveRecord.ActiveRecordMediator 
        .GetSessionFactoryHolder(). 
        CreateSession(typeof(Castle.ActiveRecord.ActiveRecordBase)); 

ahora su trabajo grande ..

+0

Por favor, explique su código. – xxmbabanexx

+0

código pre-publicación agregado utilizado para recuperar sesión –

0

En su archivo hibernate.cfg.xml, agregue este código:

Básicamente, en el código de su:

<mapping assembly="DataTransfer" /> 
Cuestiones relacionadas