Невозможно загрузить тип 'NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu' - PullRequest
3 голосов
/ 11 ноября 2009

Я пытаюсь проработать " Ваше первое приложение на основе NHibernate ", чтобы освоить другие типы ORM (я привык к DevExpress 'XPO), и я понимаю, что есть Разница между версией, которую использует Tut, и самой новой доступной версией.

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

  1. Я добавил ссылку на NHibernate.ByteCode.LinFu (CopyLocal = true)
  2. Я добавил это свойство в свой файл hibernate.cfg.xml следующим образом (для удобства чтения разнесено на несколько строк):

    NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu

И я убедился, что я запускаю сборку в x86.

Что еще я могу сделать, чтобы решить эту проблему?

Ответы [ 4 ]

7 голосов
/ 11 ноября 2009

Полный синтаксис в узле должен быть таким:

<property name="proxyfactory.factory_class">
   NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu
</property>

Можете ли вы подтвердить, что это весь ваш текст? Также убедитесь, что с вашими DLL у вас есть следующее:

LinFu.DynamicProxy.dll
NHibernate.ByteCode.LinFu.dll

Надеюсь, это поможет. Я использую его для отложенной загрузки, и он успешно работает с веткой 2.1.0GA (даже несмотря на то, что в нашей ветви есть некоторые исправления, перенесенные из магистрали (проблемы SqlServerCE)

Обновление 1

Хорошо, в моих проектах я ссылаюсь на следующие сборки:

  • Antlr3.Runtime.dll
  • Iesi.Collections.dll
  • LinFu.DynamicProxy.dll
  • log4net.dll
  • NHibernate.byteCode.LinFu.dll
  • NHibernate.dll

Можете ли вы также опубликовать свой полный файл hibernate.cfg.xml, файл конфигурации NHibernate?

Обновление 2

Вы включили выход log4net? Я обнаружил, что самый простой способ сделать это с помощью кода. Попробуйте сделать что-то подобное в своем коде, чтобы вы могли получить расширенные возможности ведения журнала:

FileAppender appender = new FileAppender();

appender.File = "nhibernate.log";
appender.LockingModel = new FileAppender.MinimalLock();
appender.ImmediateFlush = true;

pattern = "%timestamp, %thread, %level, %logger, %ndc,%message %newline";
PatternLayout pl = new PatternLayout(pattern);

appender.Layout = pl;
appender.ActivateOptions();
appender.Threshold = log4net.Core.Level.Verbose;

log4net.Config.BasicConfigurator.Configure(appender);

С этим выводом мы, возможно, сможем найти причину проблемы.

Было бы неплохо получить копию вашего проекта, чтобы я мог расследовать и помочь вам найти причину ваших ошибок.

Обновление 3

Хорошо, я следовал учебному руководству, и это мои заметки, и я смог получить рабочий пример до реализации обновления:

  • Добавлено виртуальное предложение в FirstSolution / Domain / Product.cs
  • Добавлены сборки LinFu.DynamicProxy и NHibernate.ByteCode.LinFu в файл FirstSolution
  • Добавлен NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu в файл конфигурации
  • Изменен новый SchemaExport (cfg) .Execute (false, true, false, false); в новый SchemaExport (cfg) .Execute (false, true, false);
1 голос
/ 12 ноября 2009

Добавьте App.Config (файл конфигурации приложения) в ваш проект TEST и вставьте в него следующее После:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>

    <property name="connection.connection_string">ADD CON STRING</property>

    <property name="connection.isolation">ReadCommitted</property>
    <property name="default_schema">dbo</property>
    <property name="show_sql">true</property>
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>



    <property name="cache.use_second_level_cache">false</property>
    <property name="cache.use_query_cache">false</property>
    <!-- HBM Mapping Files -->
    <mapping assembly="Namespace.Assembly"/>
  </session-factory>
</hibernate-configuration>

Измените Mapping Assembly line и добавьте строку подключения. App.Config должен быть в файле, который работает - т.е. Тестовая сборка, а не сборка домена.

Не то, чтобы это имело значение для базового тестового проекта NHibernate, но обычно реализация байт-кода замка считается лучше.

В чем различия между LinFu.DynamicProxy и Castle.DynamicProxy?

0 голосов
/ 12 ноября 2009

Я использовал Castle Proxy, а не linfu, но даже у меня была похожая ошибка. Для меня проблема заключалась в том, что поскольку прокси-класс загружается динамически, Visual Studio не копирует все зависимости должным образом в каталог bin или bin \ debug dir. Проверьте выходной каталог вашей сборки, если следующие файлы отсутствуют, скопируйте их и затем протестируйте

LinFu.DynamicProxy.dll NHibernate.ByteCode.LinFu.dll

0 голосов
/ 12 ноября 2009

Вы пробовали включить журналы Fusion ? Иногда они очень полезны

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