我在设置NHibernate时遇到了一些麻烦,而且我不太清楚问题究竟是什么。我正在尝试将域对象保存到数据库(Oracle 10g XE)。但是,我在尝试创建ISessionFactory时遇到了TypeInitializationException。这是我的hibernate.cfg.xml的样子:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="MyProject.DataAccess">
<property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property>
<property name="connection.connection_string">
User ID=myid;Password=mypassword;Data Source=localhost
</property>
<property name="show_sql">true</property>
<property name="dialect">NHibernate.Dialect.OracleDialect</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
<mapping resource="MyProject/Domain/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
我创建了一个DAO,我将用它来将域对象持久化到数据库中。 DAO使用创建SessionFactory的HibernateUtil类。这两个类都与Hibernate配置一起位于DataAccess命名空间中。这是发生异常的地方。这是班级:
public class HibernateUtil
{
private static ISessionFactory SessionFactory = BuildSessionFactory();
private static ISessionFactory BuildSessionFactory()
{
try
{
// This seems to be where the problem occurs
return new Configuration().Configure().BuildSessionFactory();
}
catch (TypeInitializationException ex)
{
Console.WriteLine("Initial SessionFactory creation failed." + ex);
throw new Exception("Unable to create SessionFactory.");
}
}
public static ISessionFactory GetSessionFactory()
{
return SessionFactory;
}
}
DataAccess命名空间引用NHibernate DLL。这几乎与我在Java中使用Hibernate的设置相同,所以我不完全确定我在这里做错了什么。有什么想法吗?
修改
最内层的例外情况如下:
“无法找到文件'C:\ Users \ Tyler \ Documents \ Visual Studio 2010 \ Projects \ MyProject \ MyProject \ ConsoleApplication \ bin \ Debug \ hibernate.cfg.xml'。”
ConsoleApplication包含我创建了User对象的入口点,并尝试使用我的DAO保留它。为什么要在那里查找配置文件?实际的持久化发生在DAO中,它位于DataAccess中。此外,当我将配置文件添加到ConsoleApplication时,它仍然找不到它。
答案 0 :(得分:0)
它正在寻找该目录中的配置文件,因为这是NHibernate查找配置文件的默认位置。请注意,这是一个目录,它与名称空间无关。您需要在项目的hibernate.cfg.xml文件中设置属性以复制到输出目录。
答案 1 :(得分:0)
如果您可以将cfg.xml文件复制到包含NHibernate程序集的文件夹,我认为此问题将得到解决