龙8官网long8

当前位置:龙8官网long8 > 龙8官网long8 > 使用ef6创建oracle数据库的实体模型

使用ef6创建oracle数据库的实体模型

来源:http://www.sketchydesignstudio.com 作者:龙8官网long8 时间:2019-10-05 15:59

涸泽而渔方案中的数据层项目开始的一段时代使用的是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)。

龙8官网long8,报错原因是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

本文由龙8官网long8发布于龙8官网long8,转载请注明出处:使用ef6创建oracle数据库的实体模型

关键词:

上一篇:BPM前后台交互方法介绍

下一篇:没有了