0

私はWebプロジェクトを持っており、次のようなnhibernate構成ファイルを使用しています:

<session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.connection_string">Server=.\sqlexpress;Initial Catalog=afemanager;Integrated Security=no;User=sa;Password=password;</property>
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
    <property name="show_sql">true</property>

    <mapping file="afe-serialization.hbm.xml"/>
    <mapping file="afe-view.hbm.xml"/>
  </session-factory>

次に、次のように構成を読み取ります。

 public static ISession GetSession()
 {
      NHibernate.Cfg.Configuration config = new NHibernate.Cfg.Configuration();       
      return config.Configure(Path.Combine( HttpContext.Current.Server.MapPath( "/" ), "App_Data", NHIBERNATE_CFG)).BuildSessionFactory().OpenSession();
 }

実行すると、例外が表示されます。

「/」アプリケーションでサーバー エラーが発生しました。ファイル 'C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\11.0\afe-serialization.hbm.xml' が見つかりませんでした。

.hbm ファイルがそのディレクトリにありません。私の質問は、マッピング ファイルを設定して App_Data ディレクトリから .hbm ファイルを取得する方法です。

このようなもの:

Path.Combine(HttpContext.Current.Server.MapPath("/"), "App_Data", "afe-serialization.hbm.xml")
4

2 に答える 2

0

hbm.xml ファイルの「Build Action」プロパティを「Embedded Resources」に設定して、デプロイ中にプロジェクトの作業ディレクトリにコピーされるようにすることをお勧めします。これは、プロパティ ウィンドウを使用して行うことができます。この場合、マッピング ファイルは任意のディレクトリに置くことができます。

コードは次のようになります。

 public static ISession GetSession()
{
  NHibernate.Cfg.Configuration config = new NHibernate.Cfg.Configuration();       
  return config.AddAssembly("Assembly Name").BuildSessionFactory().OpenSession();
}

お役に立てれば!

于 2013-07-22T13:44:58.683 に答える