ProxyFactoryFactory не был настроен

Рассматривая этот пример в качестве базового, я создал приложение, но при выполнении этого приложения я получаю следующую ошибку.

ProxyFactoryFactory не был настроен. Инициализируйте свойство proxyfactory.factory_class раздела конфигурации фабрики сеанса с одним из доступных поставщиков NHibernate.ByteCode. Пример: NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu Пример: NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle

Ниже приведен фрагмент кода, который я использую.

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 = "joe@cool.com";
        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();    
    }
}

И мой app.config файл выглядит как

    <?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>

я имею LinFu.DynamicProxy.dll вместо linfu.dll, Это будет работать? Если нет, то откуда это взять linfu.dll? Или есть другое решение?

5 ответов

Решение

Предполагая, что у вас есть NHibernate 2.1 Alpha3, скопируйте LinFu.DynamicProxy.dll а также NHibernate.ByteCode.LinFu.dll от \Required_For_LazyLoading\LinFu в вашу корзину (или ссылки)

Тогда ваша строка конфигурации должна работать:

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

В сторону, я предпочитаю hibernate-configuration секционный блок для конфигурации.

Изменить: вот соответствующие разделы из моей веб-конфигурации, если вы хотите настроить с hibernate-configuration вместо пар ключ / значение.

Кроме того, можно просто поставить hibernate-configuration часть в своем собственном файле под названием hibernate.cfg.xml, Затем вы можете использовать xsd nhibernate-configuration.xsd это в загрузке, чтобы проверить вашу конфигурацию.

<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>

На самом деле мы используем Castle Proxy и имеем следующее.

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

После этого нужно просто убедиться, что ВСЕ файлы в каталоге отложенной загрузки NHibernate Castle находятся в корзине.

LinFu.DynamicProxy.dll не достаточно Вам также нужно NHibernate.ByteCode.Linfu.dll (и, возможно, другие).

Я получил эту ошибку после публикации моего проекта через функцию "Опубликовать..." в Visual Studio 2008, когда пытался отправить наш проект MVC/NHibernate на наш веб-сервер.

Оказалось, что мне просто нужно было установить правильные параметры в диалоговом окне публикации. В частности, в разделе "Копировать" укажите "Все файлы в папке исходного проекта", после чего он начал работать. "Только файлы, необходимые для запуска этого приложения" не были достаточно хорошими, возможно, Visual Studio не была достаточно умна, чтобы выяснить, какие DLL загружались с отложенным доступом?

<?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>

копия LinFu.DynamicProxy.dll а также NHibernate.ByteCode.LinFu.dll в папку NHibernate и добавить те же файлы DLL в ссылку на проект.

rnate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
<property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
Другие вопросы по тегам