无法从NHibernate.Driver.OracleDataClientDriver创建驱动程序

bev*_*qua 15 c# oracle connection nhibernate driver

这是引发异常的代码:

public static class NHibernateSessionManager
{
    private static ISessionFactory sessionFactory = new Configuration().Configure().BuildSessionFactory();

    public static ISession GetSession(string clientId)
    {
        if (ContextSession == null)
            ContextSession = sessionFactory.OpenSession(new OracleIntercerptor(clientId.ToUpper()));
        else
            ((OracleConnection)ContextSession.Connection).ClientId = clientId;

        return ContextSession;
    }

    // - snip -
}
Run Code Online (Sandbox Code Playgroud)

以及对引发异常的代码的调用:

    private ISession NHibernateSession
    {
        get 
        {
            return NHibernateSessionManager.GetSession(SessionWrapper.GetUser());
        }
    }
Run Code Online (Sandbox Code Playgroud)

我得到了 TypeInitializationException

{"'Sigaf.Presupuesto.EntidadesDAL.NHibernate.NHibernateSessionManager'的类型初始化程序引发了异常."}

有一个内在的例外

{"无法从NHibernate.Driver.OracleDataClientDriver创建驱动程序."}

还有一些内部异常使我成为一个NRE:

你调用的对象是空的.
在NHibernate.Driver.OracleDataClientDriver..ctor()

NHibernate v3.0 Target Framework v4.0此代码实现适用于其他类似的解决方案.

哦,Hibernate.config文件:

<?xml version="1.0"?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
    <property name="current_session_context_class">web</property>
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
    <property name="connection.driver_class">NHibernate.Driver.OracleDataClientDriver</property>
    <property name="connection.connection_string_name">Sigaf</property>
    <property name="default_schema">PRE</property>
    <property name="show_sql">true</property>
    <mapping assembly="Sigaf.Presupuesto.EntidadesDAL" />
  </session-factory>
</hibernate-configuration>
Run Code Online (Sandbox Code Playgroud)

Len*_*rri 35

确保实际的Oracle驱动程序位于应用程序bin文件夹中.

在Visual Studio中,您应该Oracle.DataAcess.dll在项目中添加引用,例如.

选择DLL =>右键单击它=>在属性网格中选择Copy Local = True.

这应该可以解决您的问题.

  • 我在我的数据访问项目中这样做但它没有用.一旦我在我的应用程序项目(MVC3)中执行此操作,它就可以工作了. (4认同)
  • 这是有道理的,一个项目只会引入一个引用需要编译的程序集.对于这些类型的引用(仅反射/仅配置引用),它们必须位于主机项目中. (3认同)