3

バリデータープロジェクトでNHibernateとCastleを使用してプロジェクトを構築しています。それらすべての間で、サポートされている最新バージョンにアップグレードしようとしています。アプリケーションはエラーなしで動作しましたが、いくつかの単体テストで以下の例外が発生しています。これらは、実際にはデータベースにまったく影響を与えないテストですが、マップされたエンティティの機能をテストします。

    NHibernate.Bytecode.ProxyFactoryFactoryNotConfiguredException: 
    The ProxyFactoryFactory was not configured.
    Initialize 'proxyfactory.factory_class' property of the session-factory
    configuration section with one of the available NHibernate.ByteCode providers.
    Example:
    <property name='proxyfactory.factory_class'>
    NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu
    </property>
    Example:
    <property name='proxyfactory.factory_class'>
    NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle
    </property>
    [Continues down stack trace...]

以下は私の設定ファイルです:

   <?xml version="1.0" encoding="utf-8" ?>
   <hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
    <session-factory name="Linx2">
  <property
        name="connection.driver_class">NHibernate.Driver.NpgsqlDriver</property>
      <property name="dialect">Linx2.Common.Framework.PostgreSQL83Dialect, 
        Linx2.Common.Framework</property>
  <property name="connection.connection_string">[Hidden so I don't get fired.]</property>
      <property name="adonet.batch_size">10</property>
  <property name="show_sql">false</property>
  <property name="use_outer_join">true</property>
  <property name="command_timeout">60</property>
  <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
      <property name="proxyfactory.factory_class">
         NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle
       </property>
        <property name="connection.release_mode">after_transaction</property> 
        <mapping assembly="NHibernate.Collection.Observable" />
    </session-factory>
   </hibernate-configuration>

そこに構成マッピングがあり、アプリケーションで機能します。NHibernate.ByteCodedllも含めています。ただし、これらのテストでは無視されます。個別のテストで手動で構成を開始しようとしましたが、テストの途中で停止して、構成にアイテムが含まれていることを確認しました。ただし、IsInitialized呼び出しでは、以下のコードで例外がスローされます。

    if (NHibernateUtil.IsInitialized(ChildAssociations))
                {
                    ChildAssociations.ForEach(x => isValid = isValid && x.Element.IsValid(validatedObjects));
                }

これは以前は、2.2のNHibernateビルドで問題なく機能していました。どんな助けでも大歓迎です。私はこの4時間頭を殴っています。

4

1 に答える 1

1

どうやらNHibernateUtilは構成を初期化するだけでなく、セッションファクトリを構築する必要があります。手動で構成を実行し、テストでセッションファクトリを構築することで、それを機能させることができました。セッションファクトリは事前に構築されていたため、アプリでは問題ありませんでした。

var cfg = new NHibernate.Cfg.Configuration().Configure();
var sessionFactory = cfg.BuildSessionFactory();
于 2012-02-02T18:53:59.503 に答える