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

如果你使用

config.Configure();

如果没有参数,它将从您的 bin 文件夹中加载您的默认 hibernate.hbm.xml。

于 2013-07-22T15:33:24.893 回答
0

您可能希望将 hbm.xml 文件的“构建操作”属性设置为“嵌入式资源”,以便在部署期间将其复制到您的项目工作目录。您可以使用属性窗口执行此操作。在这种情况下,您的映射文件可以在您选择的任何目录中。

您的代码可能类似于:

 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 回答