手续同遇到的问题——使用ef6创办oracle数据库的实体模型。步骤和遇到的题目——使用ef6创oracle数据库的实体模型。

by admin on 2018年10月18日

釜底抽薪方案中之数据层项目初期使用的凡oracle 11g + ef5
创建的实体模型,在分页时撞了skip参数为0报错的问题,没有找到有关材料。

缓解方案受到的数据层项目初期使用的是oracle 11g + ef5
创建的实体模型,在分页时遇了skip参数为0报错的问题,没有找到相关资料。

遂决定升级到ef6,在oracle官网中摸清,Oracle Data Provider for .NET in
ODAC 12c Release 3
开始支持ef6(https://docs.oracle.com/cd/E56485\_01/win.121/e55744/release\_changes.htm\#CIHGIAEG)

于是乎决定升级到ef6,在oracle官网中获知,Oracle Data Provider for .NET in
ODAC 12c Release 3
开始支持ef6(https://docs.oracle.com/cd/E56485\_01/win.121/e55744/release\_changes.htm\#CIHGIAEG)

设置步骤:

设置步骤:

1.安装odac,下载地址http://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html

1.安装odac,下载地址http://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html

2.数据层项目的.net版本更改成为4.5之上,使用nuget安装 EntityFramework
6 +Oracle.ManagedDataAccess
+Oracle.ManagedDataAccess.EntityFramework,都安时稳定版。

2.数据层项目的.net版本更改成为4.5上述,使用nuget安装 EntityFramework
6 +Oracle.ManagedDataAccess
+Oracle.ManagedDataAccess.EntityFramework,都安时稳定版。

安装后app.config和web.config都见面叫加入如下配置起

安后app.config和web.config都见面为在如下配置起

<configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </providers>
  </entityFramework>
  <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.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </DbProviderFactories>
  </system.data>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <publisherPolicy apply="no" />
        <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <oracle.manageddataaccess.client>
    <version number="*">
      <dataSources>
        <dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " />
      </dataSources>
    </version>
  </oracle.manageddataaccess.client>
<configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </providers>
  </entityFramework>
  <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.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </DbProviderFactories>
  </system.data>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <publisherPolicy apply="no" />
        <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <oracle.manageddataaccess.client>
    <version number="*">
      <dataSources>
        <dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " />
      </dataSources>
    </version>
  </oracle.manageddataaccess.client>

瞩目 entityFramework和 system.data中之版号,nuget安装后自动生成的相似没有问题,我于安前将网上查找的资料里之安排起在中间了,但是版本号不等同,程序启动不了,一直无顾到本号,

顾 entityFramework和 system.data中的本号,nuget安装后自动生成的一般没问题,我在装前把网上搜寻的素材里之布置起在其中了,但是版本号不均等,程序启动不了,一直未曾在意到本号,

搜了好同一会面才发现凡是随即片个地方。

招来了好同一会见才发觉是当时简单只地方。

3.然晚便可添加实体模型了。此时若vs中显得搜不交同ef6
兼容的实业框架提供程序
,需要以部署文件被之ef节的 <provider
invariantName=”System.Data.SqlClient”
type=”System.Data.Entity.SqlServer.SqlProviderServices,
EntityFramework.SqlServer”
/>删掉或者注释掉,保存后更另行尝试添加实体模型。

3.然继即使可长实体模型了。此时要是vs中显得搜不至跟ef6
兼容的实业框架提供程序
,需要拿部署文件被之ef节的 <provider
invariantName=”System.Data.SqlClient”
type=”System.Data.Entity.SqlServer.SqlProviderServices,
EntityFramework.SqlServer”
/>删掉或者注释掉,保存后还重新尝试添加实体模型。

增长实体模型时得事先不挑数据库里之表,即生成空模型,然后打开edmx文件,在范浏览器中选中实体模型,在性能被管DDL生成模板改化SSDLToOracle.tt
(VS),数据库生成工作流改化Generate Oracle Via T4
(TPT).xaml
(VS)。

长实体模型时需要事先不挑数据库里之阐发,即生成空模型,然后打开edmx文件,在范浏览器中选中实体模型,在性质被把DDL生成模板改化SSDLToOracle.tt
(VS),数据库生成工作流改化Generate Oracle Via T4
(TPT).xaml
(VS)。

这般做的案由是要DDL生成模板下默认项SSDLToOracle.tt
oracle中之number(1,0)和number(2,0)类型的字段生成的实体性质之项目会是int16,然后运行的下报映射不配合的缪(错误代码2019)。

这么做的因由是要DDL生成模板下默认项SSDLToOracle.tt
oracle中之number(1,0)和number(2,0)类型的字段生成的实业性之档次会是int16,然后运行的上报映射不兼容的荒谬(错误代码2019)。

报错原因是oracle从ODP.NET
12.1.0.2起来为ef6使新的默认类型映射,官网证实https://docs.oracle.com/cd/E56485\_01/win.121/e55744/entityDataTypeMapping.htm\#ODPNT8303,其中的 New
Default Mappings 段。

报错原因是oracle从ODP.NET
12.1.0.2开也ef6用到新的默认类型映射,官网证实https://docs.oracle.com/cd/E56485\_01/win.121/e55744/entityDataTypeMapping.htm\#ODPNT8303,其中的 New
Default Mappings 段。

SSDLToOracle.tt模板生成的性质的型是number(1,0)对应boolean,number(2,0)对应byte,这个相应关系和新映射是相同的。

SSDLToOracle.tt模板生成的性之类型是number(1,0)对应boolean,number(2,0)对应byte,这个相应关系与新映射是一致的。

附上ef5的映射

附上ef5的映射

Oracle Type Default EDM Type Custom EDM Type
Number(1,0) Int16 bool
Number(2,0) to Number(3,0) Int16 byte
Number(4,0) Int16 Int16
Number(5,0) Int16 Int32
Number(6,0) to Number(9,0) Int32 Int32
Number(10,0) Int32 Int64
Number(11,0) to Number(18,0) Int64 Int64
Number(19,0) Int64 Decimal
Oracle Type Default EDM Type Custom EDM Type
Number(1,0) Int16 bool
Number(2,0) to Number(3,0) Int16 byte
Number(4,0) Int16 Int16
Number(5,0) Int16 Int32
Number(6,0) to Number(9,0) Int32 Int32
Number(10,0) Int32 Int64
Number(11,0) to Number(18,0) Int64 Int64
Number(19,0) Int64 Decimal

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图