部署和配置ODP.NET无需使用Entity Framework进行安装即可工作

Dan*_*rod 33 oracle entity-framework app-config odp.net dataprovider

如何在不使用Entity Framework进行安装的情况下部署和配置ODP.NET?

A.如何部署和配置Oracle.DataAccess.Client?

B.如何部署和配置Oracle.ManagedDataAccess.Client?

C.为了使用Oracle SSDL的EDMX进行构建,您需要做什么?

D.您需要为设计师支持安装什么?

Dan*_*rod 67

这个答案总结(希望)所需的所有步骤,其中许多在线记录在各个地方,可能会节省数小时的谷歌搜索.

A.如何部署和配置Oracle.DataAccess.Client.

A.1.下载ODAC112030Xcopy_64bit.zipODAC112030Xcopy_32bit.zip.

A.1.1.将zip文件中以下文件夹的内容解压缩到应用程序/主机的bin/setup文件夹中:

A.1.1.1.instantclient_11_2

A.1.1.2.odp.net4\BIN \

A.1.1.3.odp.net4\odp.net\BIN \

A.1.1.4.odp.net4\odp.net\PublisherPolicy\4 \

A2.将以下部分添加到应用程序的/ host的app.config/web.config的开头(如果已有configSections元素,请将该部分添加到其中:

<configSections>
  <section name="oracle.dataaccess.client"
    type="System.Data.Common.DbProviderConfigurationHandler, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
Run Code Online (Sandbox Code Playgroud)

A.3.将以下部分添加到应用程序/ host的app.config/web.config的末尾:

A.4.从ODAC112030Xcopy的文件夹中运行:

configure.bat odp.net4 somename
Run Code Online (Sandbox Code Playgroud)

我建议使用oraclehome112030_32或oraclehome112030_64作为上面的"somename".

<system.data>
  <DbProviderFactories>
    <!-- Remove in case this is already defined in machine.config -->
    <remove invariant="Oracle.DataAccess.Client" />
    <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=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
  </DbProviderFactories>
</system.data>

<oracle.dataaccess.client>
  <settings>
    <add name="bool" value="edmmapping number(1,0)" />
    <add name="byte" value="edmmapping number(3,0)" />
    <add name="int16" value="edmmapping number(5,0)" />
    <add name="int32" value="edmmapping number(10,0)" />
    <add name="int64" value="edmmapping number(19,0)" />
    <add name="int16" value="edmmapping number(38,0)" />
    <add name="int32" value="edmmapping number(38,0)" />
    <add name="int64" value="edmmapping number(38,0)" />
  </settings>
</oracle.dataaccess.client>
Run Code Online (Sandbox Code Playgroud)




B.如何部署和配置Oracle.ManagedDataAccess.Client.

B.1.下载ODP.NET_Managed_1120350_Beta.zip

B.1.1.将以下文件解压缩到应用程序/主机的bin/setup文件夹中.

B.1.1.1.Oracle.ManagedDataAccess.dll

B.1.1.2.x64\Oracle.ManagedDataAccessDTC.dll或x86\Oracle.ManagedDataAccessDTC.dll

B.2.将以下部分添加到应用程序的/ host的app.config/web.config的开头(如果已有configSections元素,请将该部分添加到其中:

<configSections>
  <section name="oracle.manageddataaccess.client"
    type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.112.3.50, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>
Run Code Online (Sandbox Code Playgroud)

B.3.将以下部分添加到应用程序/ host的app.config/web.config的末尾:

<system.data>
  <DbProviderFactories>
    <!-- Remove in case this is already defined in machine.config -->
    <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.112.3.50, Culture=neutral, PublicKeyToken=89b483f429c47342" />
  </DbProviderFactories>
</system.data>

<oracle.manageddataaccess.client>
  <version number="*">
    <settings>
      <!-- Set this path if you are using TNS aliases as connection strings (not recommended) -->
      <!-- Instead you can use "SERVER_NAME:PORT/SERVICE_NAME" as your data source -->
      <setting name="TNS_ADMIN" value="C:\"/>
    </settings>
    <edmMappings>
      <edmMapping dataType="number">
        <add name="bool" precision="1"/>
        <add name="byte" precision="2" />
        <add name="int16" precision="5" />
      </edmMapping>
    </edmMappings>
  </version>
</oracle.manageddataaccess.client>
Run Code Online (Sandbox Code Playgroud)




C.用于建筑:

C.1.将此部分添加到EDMX程序集的app.config中:

(尚未尝试使用Oracle.托管 DataAccess.Client)

<oracle.dataaccess.client>
  <settings>
    <add name="bool" value="edmmapping number(1,0)" />
    <add name="byte" value="edmmapping number(3,0)" />
    <add name="int16" value="edmmapping number(5,0)" />
    <add name="int32" value="edmmapping number(10,0)" />
    <add name="int64" value="edmmapping number(19,0)" />
    <add name="int16" value="edmmapping number(38,0)" />
    <add name="int32" value="edmmapping number(38,0)" />
    <add name="int64" value="edmmapping number(38,0)" />
  </settings>
</oracle.dataaccess.client>
Run Code Online (Sandbox Code Playgroud)

C.2.将名为Oracle.xsd的文件添加到具有以下内容的同一程序集中:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="odpnetappconfigmappings" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:complexType name="addtype">
    <xs:attribute name="name" type="xs:string" />
    <xs:attribute name="value" type="xs:string" />
  </xs:complexType>

  <xs:complexType name="settingstype">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="add" type="addtype" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="oracledataaccessclienttype">
    <xs:sequence minOccurs="0" maxOccurs="1">
      <xs:element name="settings" type="settingstype" />
    </xs:sequence>
  </xs:complexType>

  <xs:element name="oracle.dataaccess.client" type="oracledataaccessclienttype" />

</xs:schema>
Run Code Online (Sandbox Code Playgroud)

C.3.将上面的XSD添加到上面的app.config的Schema列表中.

C.4.如果在构建期间遇到布尔映射错误,即使构建成功,也请将app.config映射添加到Visual Studio的devenv.exe.config.

C.5.如果要使用Oracle.ManagedDataAccess.Client,请在构建之前手动编辑EDMX中的数据提供程序属性(我没有尝试过)或在运行时创建Context之前编辑它,并从编辑后的副本加载MSSL而不是资源(这似乎工作,我也使用类似的技巧来选择为不同的数据库提供程序加载哪个MSSL).




D.对于设计师的支持:

D.1.下载win64_11gR2_client.zipwin32_11gR2_client.zip并安装.

D.1.1.选择"管理员"作为安装类型.

D.2.下载ODT并安装.




我在使用Windows 7 x64的空白机器(VM)上尝试了这个(A和B).

此过程似乎不适用于Windows x64上的x86版本的Oracle.DataAccess.Client.

该过程似乎适用于Windows x64上的x64版本的Oracle.DataAccess.Client以及两个版本的Oracle.ManagedDataAccess.Client.


Dan*_*rod 13

更新:

从Oracle.DataAccess.Client迁移到Oracle.ManagedDataAccess.Client v12.1.0(12c)的简单方法:

编辑: 下载托管ODAC v12c版本1的链接.


如果您下载winx64_12c_client.zipwinnt_12c_client32.zip,在VM上压缩并安装(使用ODP.NET组件进行完全(管理员)安装或自定义安装,客户端安装不包括此组件),您将找到该文件夹\odp.net\managed下的文件夹"客户端"文件夹.

在这个文件夹中你会发现common\Oracle.ManagedDataAccess.dll,x86\Oracle.ManagedDataAccessDTC.dllx64\Oracle.ManagedDataAccessDTC.dll.

复制Oracle.ManagedDataAccess.dll到bin目录并复制Oracle.ManagedDataAccessDTC.dllx86/x64 bin目录下的正确平台,或者按客户端,将特定DLL的正确平台安装到GAC中,将bin保持为AnyCPU.

新DLL的汇编版本是4.121.1.0,PublicKeyToken似乎是相同的(没有检查它,但它没有我更改它工作).

和以前一样,将此部分添加到app.config configuration/configSections(在app.config文件的开头):

<configuration>
   <configSections>
Run Code Online (Sandbox Code Playgroud)

部分:

    <section name="oracle.manageddataaccess.client"
        type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
Run Code Online (Sandbox Code Playgroud)

并关闭:

</configSections>
Run Code Online (Sandbox Code Playgroud)

在system.data/DbProviderFactories下(在上面之后):

<system.data>
  <DbProviderFactories>
Run Code Online (Sandbox Code Playgroud)

加:

    <remove invariant="Oracle.DataAccess.Client" />
    <remove invariant="Oracle.ManagedDataAccess.Client" />
Run Code Online (Sandbox Code Playgroud)

确保machine.config中没有任何冲突

然后加:

  <add name="ODP.NET, Managed Driver" invariant="Oracle.DataAccess.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" />
Run Code Online (Sandbox Code Playgroud)

并关闭:

  </DbProviderFactories>
</system.data>
Run Code Online (Sandbox Code Playgroud)

注意我用作Oracle.DataAccess.Client不变的而不是官方的Oracle.ManagedDataAccess.Client.这是因为我不想更改所有EDMX并重新编译它们的程序集以使它们使用新的托管客户端而不是旧的非托管客户端.

然后将以下部分(在上面之后)添加到app.config中

 <oracle.manageddataaccess.client>
    <version number="*">
      <edmMappings>
        <edmMapping dataType="number">
          <add name="bool" precision="1"/>
          <add name="byte" precision="2" />
          <add name="int16" precision="5" />
        </edmMapping>
      </edmMappings>
    </version>
  </oracle.manageddataaccess.client>
Run Code Online (Sandbox Code Playgroud)

这通过了我的初步测试,但尚未彻底测试.