.net 实体框架与 oracle 11g

Posted

技术标签:

【中文标题】.net 实体框架与 oracle 11g【英文标题】:.net entity framework with oracle 11g 【发布时间】:2014-01-11 13:53:29 【问题描述】:

我将实体框架与 oracle 提供程序 (Oracle.ManagedDataAccessDTC) 一起使用

从 Visual Studio 运行它一切正常,但是当我将它发布到 IIS 时,我收到一个连接错误异常。

这是我的 webconfig 女巫在 Visual Studio 上工作得很好:

<?xml version="1.0"?>
<configuration>

    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>
  <connectionStrings>
    <add name="Entities" connectionString="metadata=res://*/Model.Model.csdl|
         res://*/Model.Model.ssdl|
         res://*/Model.Model.msl;
         provider=Oracle.ManagedDataAccess.Client;
         provider connection string='DATA SOURCE=ORCL;PASSWORD=giovanni;USER ID=DB_ES'" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

这是我在 IIS 上遇到的错误:

Server Error in '/EA' Application.

    ORA-12154: TNS:não foi possível resolver o identificador de conexão especificado

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

    Exception Details: OracleInternal.Network.NetworkException: ORA-12154 could not resolve the connect identifier specified

    Source Error: 


    Line 24:         public List<CADASTRO> GetCadastroBy(string CPF, string Cartao)
    Line 25:         
    Line 26:             return ent.CADASTRO.Where(x => x.CPF.Equals(CPF) && x.NUMEROSEUCARTAO.Equals(Cartao)).Select(x => x).ToList<CADASTRO>();
    Line 27:         

来自 sql plus 的查询工作正常。

有什么想法吗?

解决方案:

  <oracle.manageddataaccess.client>
    <version number="4.121.1.0">
      <settings>
        <setting name="TNS_ADMIN" value="C:\app\giovanni.saraiva\product\11.2.0\dbhome_2\network\admin"/>
      </settings>
    </version>
  </oracle.manageddataaccess.client>

在 webconfig 上。

【问题讨论】:

您应该隐藏任何敏感数据,例如 密码 【参考方案1】:

托管驱动程序似乎无法解析 TNS 名称。 你应该确保你的配置是正确的(见Documentation)。

例如:

<oracle.manageddataaccess.client>
  ...
  <settings>
    ...
    <setting name="TNS_ADMIN" value="C:\path\where\TNSNAMESFILE\is"/>
    ...
  </settings>
  ...
</oracle.manageddataaccess.client>

另外,如果machine.config 中尚未定义,您可能需要配置提供程序工厂:

<system.data>
  <DbProviderFactories>

    <remove invariant="Oracle.ManagedDataAccess.Client" />
    <add name="ODP.NET, Managed Driver"
      invariant="Oracle.ManagedDataAccess.Client"
      description="Oracle Data Provider for .NET, Managed Driver"
      type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
  </DbProviderFactories>
</system.data>

顺便说一句,我注意到您提到 Oracle.ManagedDataAccessDTC 作为托管驱动程序。请注意,Oracle.ManagedDataAccessDTC 实际上是为分布式事务提供支持的组件,而主驱动程序集称为“Oracle.ManagedDataAccess”。

【讨论】:

是的,您对 ManagedDataAccess 的看法是正确的,我会尝试提供路径,看看会发生什么。

以上是关于.net 实体框架与 oracle 11g的主要内容,如果未能解决你的问题,请参考以下文章

使用 MVC 4 将实体框架与 Oracle 11g 连接时面临的问题

ADO.NET 实体框架 - 带有实体框架 6 的 Oracle

部署和配置 ODP.NET 以在不安装实体框架的情况下工作

有人在使用带有 Oracle 数据库的实体框架吗?

ODP.NET可以使用实体框架工具支持LDAP吗?

在 ASP.NET MVC 项目中无法使用实体框架连接到 Oracle 数据库