ProxyFactoryFactory не был настроен - PullRequest
11 голосов
/ 10 июня 2009

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

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

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

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 ]

13 голосов
/ 11 июня 2009

Если у вас есть 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>
9 голосов
/ 10 июня 2009

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

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

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

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

1 голос
/ 09 декабря 2009

Я получил эту ошибку после публикации моего проекта с помощью щелчка правой кнопкой мыши в Visual Studio 2008 «Опубликовать ...» при попытке отправить наш проект MVC / NHibernate на наш веб-сервер.

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

1 голос
/ 06 декабря 2009
<?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 в ссылку на проект.

0 голосов
/ 18 декабря 2009
rnate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
<property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
...