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

Мы недавно обновили наш проект windows form C # с NHibernate 2.0 до 2.1. Мы обновили наш app.config, добавив в него «proxyfactory.factory_class», чтобы он указывал на выбранный прокси (в нашем случае это «NHibernate.ByteCode.Castle»). После обновления программа собирается и работает, как и ожидалось, без проблем. Наша проблема заключается в том, что при попытке открыть любые формы, имеющие ссылки на NHibernate при загрузке в конструкторе Visual Studio 2008, теперь выдается следующая ошибка (как если бы мы не настроили прокси-сервер):

Завод ProxyFactory не был сконфигурировано. инициализировать свойство proxyfactory.factory_class конфигурации сессионной фабрики раздел с одним из доступных Провайдеры NHibernate.ByteCode.

Трассировка стека:

   at NHibernate.Bytecode.AbstractBytecodeProvider.get_ProxyFactoryFactory()
   at NHibernate.Cfg.Configuration.Validate()
   at NHibernate.Cfg.Configuration.BuildSessionFactory()
   at DAL.NHibernateHelper..cctor() in ...\DAL\NHibernateHelper.cs:line 62

Строка 62 от NHibernateHelper:

    static NHibernateHelper()
    {
        var cfg = new Configuration();
        cfg.Configure();
        cfg.AddAssembly("DAL");
        sessionFactory = cfg.BuildSessionFactory(); // <-- line 62
    }

Вот наша конфигурация app.config для NHibernate:

<configuration>
  <configSections>
    <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
  </configSections>
  <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
      <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
      <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
      <property name="connection.connection_string">Server=ourserver;initial catalog=ourdb;Integrated Security=SSPI</property>
      <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
      <property name="show_sql">true</property>
    </session-factory>
  </hibernate-configuration>
</configuration>

Кто-нибудь знает, как решить эту проблему? Спасибо!

Ответы [ 4 ]

3 голосов
/ 07 августа 2009

Я только что разработал ту же ошибку.

Моя сборка доступа к данным имела правильную ссылку на Nhibernate.ByteCode.Castle.Dll, и она появилась в папке bin / release. Все работало нормально в сборке доступа к данным.

Произошла ошибка при попытке использовать код доступа к данным из моей тестовой сборки. Оказалось, что, хотя моя тестовая сборка ссылалась на проект доступа к данным, она не получила копию Nhibernate.ByteCode.Castle.dll. Добавление ссылки на Nhibernate.ByteCode.Castle.dll в тестовой сборке решило проблему.

1 голос
/ 05 ноября 2009

У меня была такая же проблема. Чтобы это исправить, мне пришлось не только явно ссылаться на DLL, но и добавить метод в тестовую DLL, которая явно создала NHibernate.ByteCode.Castle.ProxyFactoryFactory.

Это добилось цели.

0 голосов
/ 31 июля 2009

Убедитесь, что в свойствах вашей ссылки на Nhibernate.ByteCode.Castle установлено значение «Копировать всегда», чтобы оно копировалось в папку \ bin.

0 голосов
/ 31 июля 2009

Кажется, что конструктор как-то инициализирует вашу SessionFactory. Вы пытались добавить dll ByteCodeProvider в качестве ссылки на ваш проект?

[EDIT] Хорошо ... тот факт, что приложение запускается при развертывании, подразумевает, что все настроено правильно. Итак, ваша проблема - проблема VS DesignMode. Почему (черт возьми) вы используете NHibernate в режиме дизайна? Если вам это действительно нужно, попробуйте установить ByteCodeProvider в своем коде. Если вам это не нужно и вы просто хотите быстро обойти эту проблему, вы можете проверить текущий режим VS с помощью этого хака, который не позволяет Nhibernate создать SessionFactory:

static NHibernateHelper()
{
    if(System.Diagnostics.Process.GetCurrentProcess().ProcessName != "devenv")
    {
        var cfg = new Configuration();
        cfg.Configure();
        cfg.AddAssembly("DAL");
        sessionFactory = cfg.BuildSessionFactory(); // <-- line 62
    }
}

На вашем месте я бы попытался найти элемент управления или что-то еще, нуждающееся в этом статическом NHibernateHelper и попытаться отделить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...