解决方案中的数据层项近期期使用的是oracle 11g + ef5创制的实人体模型型,在分页时碰着了skip参数为0报错的主题材料,未有找到有关材料。

消除方案中的数据层项目中期使用的是oracle 1一g + ef5成立的实人体模型型,在分页时遭遇了skip参数为0报错的主题材料,未有找到有关材料。

于是决定晋级到ef6,在oracle官方网站中搜查缴获,Oracle Data Provider for .NET in
ODAC 1二c Release 叁开始协助ef陆(

于是乎决定晋级到ef6,在oracle官方网址中摸清,Oracle Data Provider for .NET in
ODAC 1贰c Release 3开首帮助ef6()

安装步骤:

安装步骤:

一.安装odac,下载地址

一.安装odac,下载地址

2.数据层项指标.net版本改成4.伍上述,使用nuget安装 EntityFramework
陆 +Oracle.ManagedDataAccess
+Oracle.ManagedDataAccess.EntityFramework,都设置新型稳固版。

二.数据层项指标.net版本改成四.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安装后自动生成的形似没难点,小编在安装此前把英特网找的材质里的布局项放在中间了,可是版本号分歧,程序运转不了,从来没在意到版本号,

找了好1会才察觉是那多少个地点。

找了好1会才意识是那八个地点。

3.然后就可以增加实人体模型型了。此时假设vs中显示找不到与ef陆包容的实业框架提供程序,需求将配置文件中的ef节的 <provider
invariantName=”System.Data.SqlClient”
type=”System.Data.Entity.SqlServer.SqlProviderServices,
EntityFramework.SqlServer”
/>删掉或然注释掉,保存后再重新尝试增加实人体模型型。

三.然后就足以加上实体模型了。此时若是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 T四(TPT).xaml
(VS)。

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

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

如此做的由来是假设DDL生成模板使用默许项SSDLToOracle.tt
,oracle中的number(壹,0)和number(二,0)类型的字段生成的实业性质的品类会是int1陆,然后运维的时候报映射不相称的一无可取(错误代码201九)。

报错原因是oracle从ODP.NET
1二.一.0.贰起来为ef六用到新的私下认可类型映射,官方网址证实 New
Default Mappings 段。

报错原因是oracle从ODP.NET
12.一.0.贰方始为ef陆采用新的私下认可类型映射,官方网站证实,其中的
New Default Mappings 段。

SSDLToOracle.tt模板生成的质量的花色是number(1,0)对应boolean,number(贰,0)对应byte,那一个相应关系与新映射是同样的。

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

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

总结

如上所述是笔者给大家介绍的利用ef六创办oracle数据库的实人体模型型碰到的主题素材及减轻方案,希望对大家有所辅助,假若大家有其余疑问请给自个儿留言,小编会及时还原大家的。在此也非常多谢我们对剧本之家网站的支撑!

相关文章