88bifa必发唯一官网

www.88bifa.com > 88bifa必发唯一官网 > 于是决定升级到ef6

原标题:于是决定升级到ef6

浏览次数:199 时间:2019-10-21

建设方案中的数据层项目早期使用的是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

本文由www.88bifa.com发布于88bifa必发唯一官网,转载请注明出处:于是决定升级到ef6

关键词:

上一篇:没有了

下一篇:没有了