2012-03-19 7 views
2

へのパスプロジェクト構造は次のとおりです。LocalSessionFactoryObject - MappingResources - HBMファイル

enter image description here

今、私のように豆NHibernateSessionFactoryを作成しようとしています:

<object id="NHibernateSessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate32"> 
    <property name="DbProvider" ref="DbProvider"/> 
    <property name="MappingResources"> 
    <list> 
     <value>EMSApplication.Domain/EMSApplication.hbm.xml</value> 
    </list> 
    </property> 
    <property name="HibernateProperties"> 
    <dictionary> 
     <entry key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/> 
     <entry key="dialect" value="NHibernate.Dialect.MsSql2008Dialect"/> 
     <entry key="connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/> 
     <entry key="proxyfactory.factory_class" value="NHibernate.Bytecode.DefaultProxyFactoryFactory, NHibernate"/> 
     <entry key="show_sql" value="true"/> 
     <entry key="hbm2ddl.auto" value="update"/> 
     <entry key="cache.use_query_cache" value="true"/> 
    </dictionary> 
    </property> 

    <property name="ExposeTransactionAwareSessionFactory" value="true" /> 
</object> 

しかし、私はエラーを取得していますメッセージ:

Error creating context 'spring.root': file [C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\EMSApplication.Domain\EMSApplication.hbm.xml] cannot be resolved to local file path - resource does not use 'file:' protocol. 

今すぐproj ectはDドライブにありますが、なぜこれがCドライブを指しているのだろうと思いますか?

また、指定したhbmファイルをマッピングリソースに追加する方法はありますか。このファイルは「組み込みリソース」として設定されています。

ここで複数のhbmファイルをスキャンするためのディレクトリを指定する方法はありますか?

すべての情報は私にとって非常に役立ちます。

答えて

3

リソース名にプロトコル識別子(例:file://またはassembly://)を使用していないため、Springはデフォルトのファイルプロトコルを使用します。 hbmファイルを、Webアプリケーションが実行されている場所(devserverパス)から解決しようとします。ではなく、ファイルが格納されています。期待通りです。

ウェブサイトのファイルを参照するには、~を使用して、ウェブサイトのルートを特定します。 <value>file://~/EMSApplication.Domain/EMSApplication.hbm.xml</value>。ただし、ファイルが埋め込まれたリソース(なぜ?)に設定されているので、ファイルがコピーされていることを確認してください。

は、彼らが作るよ以下の改善を考えてみましょうあなたがより簡単にライブ:あなたのフォルダdao、別のアセンブリ(ウェブから参照されるクラスライブラリプロジェクトにdomainNHibernate

  • 動くコードアプリケーション)をYour.AssemblyNameと命名しました。
  • セッションファクトリでは、スキャンするマッピングアセンブリの指定もサポートされているため、各ファイルを指定する必要はありません。setting up a session factory using spring.netのドキュメントを参照してください。マッピングアセンブリリストでYour.AssemblyName指定:
<object id="MySessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate"> 
    <property name="DbProvider" ref="DbProvider"/> 
    <property name="MappingAssemblies"> 
    <list> 
     <value>Your.AssemblyName</value> 
    </list> 
    </property> 
    <property name="HibernateProperties"> 
    <!-- snip --> 
</object> 

をそしてthe NHibernate example in the spring docsをチェックアウト - それはあなたがここに上げている質問には非常に適用です。

関連する問題