2009-10-27 19 views
7

Uso Fluido NHibernate con un archivo externo 'hibernate.cfg.xml'.Fluidez NHibernate: se produjo una excepción durante la configuración de la capa de persistencia

siguiente es el código de configuración donde estoy error al obtener:

 var configuration = new Configuration(); 
     configuration.Configure(); 

     _sessionFactory = Fluently.Configure(configuration) 
       .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Template>()) 
       .BuildSessionFactory(); 

     return _sessionFactory; 

pero cuando NHibernate está tratando de configurar, estoy consiguiendo el error floowing:

ha producido una excepción durante la configuración de la capa de persistencia.

La excepción interna dice:

The ProxyFactoryFactory was not configured. Initialize 'proxyfactory.factory_class' property of the session-factory configuration section with one of the available NHibernate.ByteCode providers.

Busqué en Google y de acuerdo con algunas de las soluciones que he encontrado, he hecho cambios siguientes:

  1. Añadir según dlls a mi papelera de aplicación:

    Castle.Core.dll, Castle.DynamicProxy2.dll, NHibernate.ByteCode.Castle.dll

  2. Agregado follwing propiedad en hibernate.cfg.xml

    < property name = "proxyfactory.factory_class" > NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle </propiedad >

Pero todavía estoy recibiendo la misma excepción.

+3

Si hace clic en el asistente de excepción en Visual Studio, puede ver la 'InnerException' (y posiblemente la' InnerException' después de eso). ¿Puedes buscarlos e incluir tanta información de error como sea posible? Probablemente revelen el problema real. – Abel

Respuesta

1

El problema puede estar en su hibernate.cfg.xml, compruebe que está utilizando la versión 2.2 y si está bien formado.

El mapeo debe empezar así:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 

Junto con el error de publicar, tal vez más información se suministra a causa de que el error es bastante genérico para el analizador de configuración. De lo contrario, tal vez pueda dar más detalles de su hibernate.cfg.xml.

0

Bueno, pude resolver ese error colocando el archivo .cfg.xml en la bandeja de la aplicación que llama.

Pero ahora, estoy consiguiendo otro error :-(

FluentNHibernate.Cfg.FluentConfigurationException fue controlada Mensaje: Se ha realizado una configuración incorrecta o incompleta, mientras que la creación de una colección de SessionFactory Compruebe PotentialReasons y InnerException por más. detalle.

* base de datos no se ha configurado a través del método de base de datos.

Aquí es mi hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> 
    <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property> 
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> 
    <property name="connection.connection_string">Server=dev\sql2005;Initial Catalog=TestDB;Integrated Security=True</property> 
    <property name="show_sql">true</property> 
    </session-factory> 
</hibernate-configuration> 

¿Alguna idea?

+7

Comprueba la InnerException. –

+2

+1 a James. Sigue corriendo por el árbol Exceptinn hasta que encuentres algo útil. –

+2

+1 a James. Estaba teniendo este error y miré InnerException para encontrar que una cadena de conexión con nombre no se estaba encontrando, y me di cuenta de que App.config de mi proyecto de prueba no tenía la cadena de conexión que estaba en Web.config de mi aplicación web. –

14

Tuve este error también.Se dispara cuando no copia el archivo de asignación (hibernate.cfg.xml) en el directorio de compilación.

Solución:

  • en el Explorador de soluciones, haga clic derecho en el archivo de asignación (hibernate.cfg.xml), seleccione Propiedades , a continuación, asegúrese de que Guardar en agenda de salida tieneCopiar si se seleccionó más reciente).
+1

Gracias KKMCT ... Me ayudó mucho :) –

1

Excepción con el texto de PotentialReasons

* Base de datos no se ha configurado a través del método de base de datos.

podrían también arrojados por el método FluentConfiguration.BuildConfiguration() en el caso de que sus asignaciones son incorrectas (es decir. * Clases de mapas no se ha analizado correctamente) y que han configurado la base de datos, no con el método() .Database. Esto es un poco confusa que sólo se descubre en la fase de construcción de la configuración, no cuando estas clases se están agregando a partir de montaje (por AddFromAssemblyOf <>)

Puede comprobar si sus * clases de mapa se convirtieron con éxito a HBM . mediante la ejecución de una línea m.FluentMappings.Add (typeof (YourMappedTypeMap)) ExportTo (@ "c: \ temp \ fluentmaps"))

0

Tratando de configurar la base de datos en App.config y las asignaciones a través de Fluido NHibernate, también recibí una FluentNHibernateException diciendo

  • La base de datos no se configuró a través del método de base de datos.

El enlace para mostrar los detalles fue desactivado, por lo tanto no pude obtener más información. Buscando horas Finalmente descubrí que mi cadena de conexión tenía un error ("pasword = xyz;" en lugar de "password = xyz;")

5

Como dijo Alex InTechno, este podría ser el error en la definición de su Mapeo archivos o en entidades mapeadas. Experimenté el mismo error cuando olvidé que todas las propiedades en las clases mapeadas deben definirse como virtual.

public String Name {get;set;} 
public virtual String Name { get; set; } 
+0

Gracias; esta fue la solución a mi versión particular de este error. ReSharper me advirtió sobre el acceso a un miembro virtual y sugirió que se sellara la clase, lo cual acepté como un novato total. –

1

tuve el mismo problema con las pruebas NUnit bajo ReSharper 8.1

Tick "ReSharper | Opciones | Herramientas | Unidad de Pruebas | Utilice dominio de aplicación separada para cada conjunto de pruebas" casilla fija que

0

Intenta establecer el modificador protegido en set_id y set_sampelList. por ejemplo:

public virtual int Id { 
    get; protected set; 
} 

y

public virtual IList<Store> StoresStockedIn { 
    get; protected set; 
} 
0

que empiecen a recibir el

* Base de datos no se ha configurado a través del método de base de datos.

mensaje de error al intentar conectarme a una base de datos DB/2 sin haber realizado ningún cambio en mi código. Después de verificar que el archivo de configuración se copiaba en el directorio de compilación y de verificar que mi XML estaba bien formado y se ajustaba a la versión 2.2, finalmente fui a verificar la base de datos para asegurarme de que nada había cambiado.

Resultó que la contraseña para la cuenta de conexión había expirado. No era inválido ni la cuenta estaba inactiva, la contraseña simplemente vencía. No estoy seguro de por qué la contraseña caducada se manifestó en un mensaje de error tan extraño.

0

Parece que este error puede ser un montón de cosas diferentes. Obtuve el mismo error y finalmente me di cuenta de que era porque había excluido una vista y un mapeo no utilizados del proyecto. No tenía idea de cómo estaba causando el error, pero tan pronto como lo agregué, el error desapareció.

Cuestiones relacionadas