ProxyFactoryFactory не настроен
Учитывая этот пример в качестве базового примера, я создал приложение, но когда я запускаю это приложение, я получаю следующую ошибку.
ProxyFactoryFactory не был настроен. Инициализируйте свойство proxyfactory.factory_class раздела конфигурации session- factory с одним из доступных поставщиков 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 = "[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();
}
}
И мой файл 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
?
Или есть ли другое решение?
Ответы
Ответ 1
Предполагая, что у вас есть 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>
Ответ 2
Мы фактически используем Замок Прокси и имеем следующее.
<property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
После этого нужно только убедиться, что ВСЕ файлы в каталоге загружаемого каталога NHibernate Castle находятся в корзине.
LinFu.DynamicProxy.dll
недостаточно. Вам также нужно NHibernate.ByteCode.Linfu.dll
(и, возможно, другие).
Ответ 3
<?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 в ссылку проекта.
Ответ 4
Я получил эту ошибку после публикации моего проекта через Visual Studio 2008, щелкнув правой кнопкой мыши "Опубликовать...", пытаясь протолкнуть наш проект MVC/NHibernate на наш веб-сервер.
Оказалось, мне просто нужно было установить правильные параметры в диалоговом окне публикации. В частности, в разделе "Копировать" укажите "Все файлы в папке исходного проекта", а затем он начал работать. "Только файлы, необходимые для запуска этого приложения", недостаточно хороши, возможно, Visual Studio недостаточно умен, чтобы выяснить, какие DLL файлы были загружены ленивым?
Ответ 5
rnate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
<property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>