步骤和遇到的题材——使用ef6创建oracle数据库的实体模型。步骤及遇到的问题——使用ef6创造oracle数据库的实体模型。

解决方案中的数据层项目最初使用的是oracle 11g + ef5,解决方案中的数据层项目最初使用的是oracle 11g + ef5

缓解方案受到之数据层项目初期使用的凡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