步骤及遇到的问题——使用ef6创建oracle数据库的

应用方案中的数据层项目中期使用的是oracle 11g + ef5 创建的实人体模型型,在分页时遇上了skip参数为0报错的题目,未有找到有关材质。

于是决定进级到ef6,在oracle官方网站中摸清,Oracle Data Provider for .NET in ODAC 12c Release 3 起始扶助ef6(

安装步骤:

1.安装odac,下载地址

2.数据层项目标.net版本改成4.5之上,使用nuget安装 EntityFramework 6 +Oracle.ManagedDataAccess +Oracle.ManagedDataAccess.EntityFramework,都设置新型牢固版。

安装后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>

留意 entityFramework和 system.data中的版本号,nuget安装后自动生成的形似没难点,笔者在装置以前把网络找的材料里的安插项放在里面了,不过版本号不均等,程序运行不了,平昔没注意到版本号,

找了好一会才察觉是那七个地点。

3.然后就足以加上实人体模型型了。此时倘诺vs中显得找不到与ef6 宽容的实体框架提供程序,必要将配备文件中的ef节的 <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />删掉恐怕注释掉,保存后再重复尝试增添实体模型。

丰裕实人体模型型时索要先不选取数据Curry的表,即生成航空模型型,然后打开edmx文件,在模型浏览器中当选实人体模型型,在性质中把DDL生成模板改成SSDLToOracle.tt (VS),数据库生成专门的学问流改成Generate Oracle Via T4 (TPT).xaml (VS)。

这般做的开始和结果是要是DDL生成模板使用私下认可项SSDLToOracle.tt ,oracle中的number(1,0)和number(2,0)类型的字段生成的实体性质的档次会是int16,然后运营的时候报映射不匹配的失实(错误代码2019)。

报错原因是oracle从ODP.NET 12.1.0.2开头为ef6施用新的私下认可类型映射,官方网址证实 New Default Mappings 段。

SSDLToOracle.tt模板生成的性能的档案的次序是number(1,0)对应boolean,number(2,0)对应byte,那些相应关系与新映射是完全一样的。

附上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

本文由88必发唯一官网必发布于服务器&运维,转载请注明出处:步骤及遇到的问题——使用ef6创建oracle数据库的

相关阅读