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

这是引发exception的代码:

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 - } 

以及对引发exception的代码的调用:

  private ISession NHibernateSession { get { return NHibernateSessionManager.GetSession(SessionWrapper.GetUser()); } } 

我得到一个TypeInitializationException

{“’Sigaf.Presupuesto.EntidadesDAL.NHibernate.NHibernateSessionManager’的类型初始化程序引发了exception。”}

内在的例外

{“无法从NHibernate.Driver.OracleDataClientDriver创建驱动程序。”}

还有一些内在的例外情况让我想到了一个N​​RE:

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

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

哦,Hibernate.config文件:

    NHibernate.Connection.DriverConnectionProvider NHibernate.Dialect.Oracle10gDialect web NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu NHibernate.Driver.OracleDataClientDriver Sigaf PRE true    

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

在Visual Studio中,您应该在项目中添加对Oracle.DataAcess.dll的引用。

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

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