NHibernate无法创建SessionFactory

时间:2011-01-09 00:31:24

标签: c# nhibernate oracle10g

我在设置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时,它仍然找不到它。

2 个答案:

答案 0 :(得分:0)

它正在寻找该目录中的配置文件,因为这是NHibernate查找配置文件的默认位置。请注意,这是一个目录,它与名称空间无关。您需要在项目的hibernate.cfg.xml文件中设置属性以复制到输出目录。

答案 1 :(得分:0)

如果您可以将cfg.xml文件复制到包含NHibernate程序集的文件夹,我认为此问题将得到解决