开首扶助ef六(

斩草除根方案中的数据层项目先前时代使用的是oracle 11g + ef5成立的实人体模型型,在分页时相遇了skip参数为0报错的主题材料,未有找到有关资料。

于是乎决定晋级到ef陆,在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

2.数据层项指标.net版本改成四.伍以上,使用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安装后自动生成的貌似没难题,笔者在安装在此以前把互连网找的资料里的配置项放在中间了,然则版本号不等同,程序运营不了,一向没在意到版本号,

找了好一会才发觉是那四个地方。

三.然后就足以增多实人体模型型了。此时借使vs中展示找不到与ef陆包容的实业框架提供程序,要求将安顿文件中的ef节的 <provider
invariantName=”System.Data.SqlClient”
type=”System.Data.Entity.SqlServer.SqlProviderServices,
EntityFramework.SqlServer”
/>删掉或许注释掉,保存后再重新尝试增添实人体模型型。

累加实人体模型型时须要先不选用数据Curry的表,即生成航空模型型,然后张开edmx文件,在模型浏览器中当选实人体模型型,在性质中把DDL生成模板改成SSDLToOracle.tt
(VS),数据库生成职业流改成Generate Oracle Via T四(TPT).xaml
(VS)。

如此这般做的因由是倘诺DDL生成模板使用暗许项SSDLToOracle.tt
oracle中的number(一,0)和number(二,0)类型的字段生成的实业性质的品种会是int16,然后运转的时候报映射不相称的荒唐(错误代码201玖)。

报错原因是oracle从ODP.NET
12.壹.0.二上马为ef陆利用新的暗中同意类型映射,官方网站证实https://docs.oracle.com/cd/E56485\_01/win.121/e55744/entityDataTypeMapping.htm\#ODPNT8303,其中的 New
Default Mappings 段。

SSDLToOracle.tt模板生成的性质的花色是number(1,0)对应boolean,number(二,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

相关文章