1

我似乎无法让我的 nHibernate 测试项目运行,我正在使用以下配置文件和代码:

country.hbm.xml 标记为嵌入资源:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="SVL.Models.CountryModel, SVL" table="country">
  <id name="Id" type="int" />
  <property name="Name" type="String" length="200" />
 </class>
</hibernate-mapping>

我的休眠配置文件:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<!-- properties -->
<property name="connection.provider">
  NHibernate.Connection.DriverConnectionProvider
</property>
<property name="connection.driver_class">
  NHibernate.Driver.MySqlDataDriver
</property>
<property name="connection.connection_string">
  Server=localhost;Database=svl;User ID=root;Password=pfje1008;
</property>
<property name="dialect">
  NHibernate.Dialect.MySQL5Dialect
</property>

<mapping resource="country.hbm.xml" assembly="SVL" />
</session-factory>
</hibernate-configuration>`

最后是设置休眠配置的代码:

var cfg = new Configuration();
 cfg.Configure();

 var sessionFactory = cfg.BuildSessionFactory();

 var thisAssembly = typeof(T).Assembly;
 cfg.AddAssembly(thisAssembly);

由于某种原因,它一直告诉我找不到资源文件...

4

2 回答 2

2

尝试摆脱这<mapping resource="country.hbm.xml" assembly="SVL" />条线,我不记得在使用嵌入式资源时曾经这样做过。

于 2013-06-10T14:10:34.603 回答
0

有几个问题,首先您正在调用的 .Configure 方法正在寻找一个包含连接字符串、方言和其他设置的文件(或者可能检查您的 web.config 以了解这些),其次您正在构建在将程序集添加到配置之前,会话工厂。

您需要在构建会话工厂之前将程序集添加到配置中,因为构建会话工厂的过程基于配置的当前状态。

所以像:

var cfg = new Configuration();
var thisAssembly = typeof(T).Assembly;
cfg.AddAssembly(thisAssembly); 
cfg.Configure();

var sessionFactory = cfg.BuildSessionFactory();

要解决您遇到的异常,我建议:

  1. 将您的 NHibernate 配置文件重命名为 hibernate.cfg.xml (如果在 app/web.config 中找不到它,它会默认查找它)
  2. 将配置放在您的 app/web.config 中(请参阅http://nhforge.org/blogs/nhibernate/archive/2009/07/17/nhibernate-configuration.aspx
  3. 在对 Configure 的调用中指定您的 NHibernate 配置文件的名称 - 即。cfg.Configure("my-nhibernate-config.config")
于 2013-06-10T16:12:02.487 回答