11

Considerando este ejemplo como ejemplo base, creé la aplicación, pero cuando ejecuto esta aplicación recibo el siguiente error.ProxyFactoryFactory no se configuró

ProxyFactoryFactory no estaba configurado. Inicialice la propiedad 'proxyfactory.factory_class' de la sección de configuración de la fábrica de sesiones con uno de los proveedores de NHibernate.ByteCode disponibles. Ejemplo: NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu Ejemplo: NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle

El siguiente es el fragmento de código que estoy utilizando.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using NHibernate; 
using NHibernate.Cfg; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Configuration cfg = new Configuration(); 
     cfg.AddAssembly("NHibernate"); 

     ISessionFactory factory = cfg.BuildSessionFactory(); 
     ISession session = factory.OpenSession(); 
     ITransaction transaction = session.BeginTransaction(); 
     User newUser = new User(); 
     newUser.Id = "joe_cool"; 
     newUser.UserName = "Joseph Cool"; 
     newUser.Password = "abc123"; 
     newUser.EmailAddress = "[email protected]"; 
     newUser.LastLogon = DateTime.Now; 

     // Tell NHibernate that this object should be saved 
     session.Save(newUser); 

     // commit all of the changes to the DB and close the ISession 
     transaction.Commit(); 
     session.Close();  
    } 
} 

Y mi archivo app.config parece

<?xml version="1.0" encoding="utf-8" ?> 
    <configuration> 
     <configSections> 
     <section 
      name="nhibernate" 
      type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
     /> 
     </configSections> 

     <nhibernate> 
     <add 
      key="hibernate.connection.provider" 
      value="NHibernate.Connection.DriverConnectionProvider" 
     /> 
     <add 
      key="hibernate.dialect" 
      value="NHibernate.Dialect.MsSql2000Dialect" 
     /> 
     <add 
      key="hibernate.connection.driver_class" 
      value="NHibernate.Driver.SqlClientDriver" 
     /> 
     <add 
      key="hibernate.connection.connection_string" 
      value="Server=localhost;initial catalog=nhibernate;Integrated Security=SSPI" 
     /> 
     <!--<add value="nhibernate.bytecode.castle.proxyfactoryfactory, nhibernate.bytecode.castle" key="proxyfactory.factory_class" />--> 
     <!--<property name="proxyfactory.factory_class">NHibernate.ByteCode.Linfu.ProxyFactoryFactory, NHibernate.ByteCode.Linfu</property>--> 
<!-- I have tried both the lines but still getting the same error --> 
     </nhibernate> 
    </configuration> 

tengo LinFu.DynamicProxy.dll en lugar de linfu.dll. ¿Funcionará? Si no, ¿de dónde saco esto linfu.dll? ¿O hay alguna otra solución?

+1

duplicados probables: http://stackoverflow.com/questions/956281/nhibernate-proxyexception y http://stackoverflow.com/questions/969894/error-using-nhibernate –

+0

También hay un error con el build target http://blog.frozzn.com/2010/03/nhibernatebytecodecastleproxyfactoryfac.html – cgreeno

Respuesta

13

Asumiendo que tiene NHibernate 2.1 Alpha3, copia LinFu.DynamicProxy.dll y NHibernate.ByteCode.LinFu.dll de \Required_For_LazyLoading\LinFu a la papelera (o referencias)

Luego, su línea de configuración debería funcionar:

<add key="proxyfactory.factory_class" value="NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu" /> 

Como acotación al margen, yo prefiero el hibernate-configuration bloque de sección para la configuración.

Editar: Aquí están las secciones relevantes de mi configuración web si desea configurar con hibernate-configuration en lugar de pares clave/valor.

Además, es posible simplemente poner la parte hibernate-configuration en su propio archivo llamado hibernate.cfg.xml. Luego puede usar el xsd nhibernate-configuration.xsd que está en la descarga para validar su configuración.

<configSections> 
    <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/> 
</configSections> 
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
     <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property> 
     <property name="default_schema">kennelfinder.dbo</property> 
     <property name="connection.provider"> 
      NHibernate.Connection.DriverConnectionProvider 
     </property> 
     <property name="proxyfactory.factory_class"> 
      NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu 
     </property> 
     <property name="connection.connection_string">{Your connection string}</property> 
     <property name="show_sql">false</property> 
     <property name="connection.driver_class"> 
      NHibernate.Driver.SqlClientDriver 
     </property> 
     <property name="connection.isolation">ReadCommitted</property> 
     <property name="use_proxy_validator">true</property> 
     <mapping assembly="KennelFinder"/> 
    </session-factory> 
</hibernate-configuration> 
+0

podría decirme cuál es la configuración de hibernación y de dónde obtendré el dll –

+1

anterior Puede descargar NHibernate 2.1 Beta1 desde http://sourceforge.net/project/downloading.php?group_id=73818&filename=NHibernate-2.1. 0.Beta1-bin.zip & a = 5370114 – Ben

+0

Lo he descargado sigue el mismo problema –

9

En realidad usamos Castle Proxy y tenemos lo siguiente.

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

Después de que es sólo una cuestión de asegurarse de que todos los archivos en el directorio de carga diferida Castillo NHibernate se encuentran en la papelera.

LinFu.DynamicProxy.dll no es suficiente. También necesita NHibernate.ByteCode.Linfu.dll (y potencialmente otros).

+0

¿Puede decirme de dónde debo obtener estos dll? –

+0

Están en la descarga de NHibernate. –

+2

Para ser más específicos, los archivos están en la carpeta Required_For_LazyLoading después de extraer la descarga de NHibernate. – kimsk

1
<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
     <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/> 
    </configSections> 
    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
     <session-factory> 
      <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property> 
      <property name="connection.provider"> NHibernate.Connection.DriverConnectionProvider </property> 
      <property name="proxyfactory.factory_class"> NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu </property> 
      <property name="connection.connection_string">Server=(local);database=HelloNHibernate;Integrated Security=SSPI;</property> 
      <property name="show_sql">false</property> 
      <property name="connection.driver_class"> NHibernate.Driver.SqlClientDriver </property> 
      <property name="connection.isolation">ReadCommitted</property> 
      <property name="use_proxy_validator">true</property> 
     </session-factory> 
    </hibernate-configuration> 
</configuration> 

Copia LinFu.DynamicProxy.dll y NHibernate.ByteCode.LinFu.dll a la carpeta del NHibernate y añadir los mismos archivos DLL a la referencia del proyecto.

1

Recibí este error después de publicar mi proyecto a través de Visual Studio 2008, haciendo clic con el botón secundario en la característica "Publicar ...", cuando intentamos impulsar nuestro proyecto MVC/NHibernate a nuestro servidor web.

Resultó que solo necesitaba establecer las opciones correctas en el diálogo de publicación. En particular, en la sección "Copiar", especifique "Todos los archivos en la carpeta del proyecto de origen", y luego comenzó a funcionar."Solo los archivos necesarios para ejecutar esta aplicación" no eran lo suficientemente buenos, tal vez Visual Studio no era lo suficientemente inteligente como para averiguar qué archivos DLL se estaban cargando de forma diferida.

-2
rnate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property> 
<property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property> 
+0

Sin texto. Marca rota. Publicado mucho más allá de las respuestas anteriores. Chapeau – SlapY

Cuestiones relacionadas