NHibernate Oracle - 无法加载DLL'OraOps10w.dll'

时间:2011-10-19 12:10:26

标签: c# asp.net-mvc oracle nhibernate

这是我第一次使用nHibernate(也从未使用过hibernate),我正在尝试使用oracle db。我的项目是MVC3 Web应用程序VS20010。所以,这是我的配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<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="connection.driver_class">NHibernate.Driver.OracleDataClientDriver</property>
    <property name="connection.connection_string">Data Source=srcname;User ID=myuser;Password=****;Unicode=True</property>
    <property name="show_sql">true</property>
  </session-factory>
</hibernate-configuration> 

以下是我如何构建会话(从nhibernate forge复制)

private static ISessionFactory SessionFactory
        {
            get
            {
                if (_sessionFactory == null)
                {
                    var configuration = new Configuration();
                    configuration.Configure();
                    configuration.AddAssembly(typeof(Categoria).Assembly);
                    _sessionFactory = configuration.BuildSessionFactory();
                }
                return _sessionFactory;
            }
        }

我当前的错误消息是:

  

无法加载DLL'OraOps10w.dll':找不到指定的模块。 (来自HRESULT的异常:0x8007007E),在_sessionFactory = configuration.BuildSessionFactory();

在此之前我遇到了一些问题,导致我:

  • 添加Oracle.DataAccess.dll
  • 的引用
  • 在web.config上添加DbproviderFactories标记。如下:(由于某种原因,无法在此处粘贴所有代码)

add name="Oracle Data Provider for .NET"
invariant="Oracle.DataAccess.Client"
description="Oracle Data Provider for .NET"
type="Oracle.DataAccess.Client.OracleClientFactory,
      Oracle.DataAccess,
      Version=2.111.6.20,
      Culture=neutral,
      PublicKeyToken=89b483f429c47342" 

1 个答案:

答案 0 :(得分:0)

Oracle数据提供商需要相当多的dll:

来自ODAC包:

  • Oracle.DataAccess.dll(这是整个列表中唯一的.NET程序集)
  • OraOps11w.dll

来自instantclient-basiclite软件包:

  • OCI.DLL
  • OCIW32.DLL
  • orannzsbb11.dll
  • oraocci11.dll
  • oraociicus11.dll

由于您只能将Oracle.DataAccess.dll作为.NET引用添加,因此您还需要一些其他方法来确保所有其他dll也在.exe目录中。

据我所知,即时客户端还有一个安装程序,因此您不需要在.exe目录中使用这些dll,但是您必须确保所有客户端都安装了该dll。