11

この例を基本例としてアプリケーションを作成しましたが、このアプリケーションを実行すると次のエラーが発生します。

ProxyFactoryFactory が構成されていません。使用可能な NHibernate.ByteCode プロバイダーの 1 つを使用して、session-factory 構成セクションの「proxyfactory.factory_class」プロパティーを初期化します。例: 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か?または、他の解決策はありますか?

4

5 に答える 5

13

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編集:キーと値のペアの代わりに設定したい場合は、これが私のWeb構成の関連セクションです。

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>
于 2009-06-11T00:12:23.493 に答える
9

実際にCastle Proxyを使用しており、以下があります。

<property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>

その後は、NHibernate Castle の遅延読み込みディレクトリ内のすべてのファイルがビンにあることを確認するだけです。

LinFu.DynamicProxy.dll十分ではありません。あなたも必要ですNHibernate.ByteCode.Linfu.dll(そして潜在的に他の人も)。

于 2009-06-10T19:56:44.057 に答える
1
<?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 のフォルダーにコピーNHibernate.ByteCode.LinFu.dllし、同じ DLL ファイルをプロジェクト参照に追加します。

于 2009-12-05T21:28:40.290 に答える
1

MVC/NHibernate プロジェクトを Web サーバーにプッシュしようとしたときに、Visual Studio 2008 の右クリック [公開...] 機能を使用してプロジェクトを公開した後、このエラーが発生しました。

パブリッシュダイアログで正しいオプションを設定するだけでよいことがわかりました。特に、「コピー」セクションで、「ソース プロジェクト フォルダ内のすべてのファイル」を指定すると、動作し始めました。「このアプリケーションを実行するために必要なファイルのみ」では十分ではありませんでした。おそらく、Visual Studio はどの DLL が遅延ロードされているかを判断するほど賢くありませんでしたか?

于 2009-12-09T14:05:01.590 に答える
-2
rnate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
<property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
于 2009-12-17T21:31:47.307 に答える