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>