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

问题描述

| 这是引发异常的代码
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 -
}
以及对引发异常的代码调用
    private ISession NHibernateSession
    {
        get 
        {
            return NHibernateSessionManager.GetSession(SessionWrapper.GetUser());
        }
    }
我得到
TypeInitializationException
  {\“类型的初始值设定项   \'Sigaf.Presupuesto.EntidadesDAL.NHibernate.NHibernateSessionManager \'   引发异常。\“} 除了内部例外   {\“无法从以下位置创建驱动程序   NHibernate.Driver.OracleDataClientDriver。\“} 其他一些内部异常使我进入了NRE:   对象引用未设置为   对象的实例。      在   NHibernate.Driver.OracleDataClientDriver..ctor() NHibernate v3.0 目标框架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>
    

解决方法

确保实际的Oracle驱动程序在您的应用程序bin文件夹中。 例如,在Visual Studio中,您应该在项目中添加对“ 4”的引用。 选择DLL =>右键单击它=>在“属性”网格中,选择“复制本地= True”。 这应该可以解决您的问题。