手续及遇到的问题——使用ef6创立oracle数据库的实体模型。步骤和遇到的题目——使用ef6创建oracle数据库的实体模型。

化解方案遭的数据层项目初期使用的是oracle 11g + ef5
创建的实体模型,在分页时遇见了skip参数为0报错的题目,没有找到相关资料。

解决方案被的数据层项目前期使用的是oracle 11g + ef5
创建的实体模型,在分页时遇见了skip参数为0报错的问题,没有找到相关资料。

遂决定升级到ef6,在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)

于是乎决定升级至ef6,在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

1.安装odac,下载地址http://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html

2.数据层项目之.net版本更改化4.5上述,使用nuget安装 EntityFramework
6 +Oracle.ManagedDataAccess
+Oracle.ManagedDataAccess.EntityFramework,都设置时稳定版。

2.数据层项目之.net版本更改化4.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安装后自动生成的相似从不问题,我在设置前将网上搜索的资料里的布置起在中间了,但是版本号不一致,程序启动不了,一直没留意到本号,

觅了好同一会面才意识是即刻点儿单地方。

摸了好同一会见才发觉凡是立即有限独地方。

3.然后哪怕好增长实体模型了。此时使vs中显示搜不顶与ef6
兼容的实业框架提供次
,需要拿部署文件被的ef节的 <provider
invariantName=”System.Data.SqlClient”
type=”System.Data.Entity.SqlServer.SqlProviderServices,
EntityFramework.SqlServer”
/>删掉或者注释掉,保存后更另行尝试添加实体模型。

3.然后虽可以添加实体模型了。此时使vs中展示搜不顶与ef6
兼容的实业框架提供次
,需要拿配备文件被之ef节的 <provider
invariantName=”System.Data.SqlClient”
type=”System.Data.Entity.SqlServer.SqlProviderServices,
EntityFramework.SqlServer”
/>删掉或者注释掉,保存后再次另行尝试添加实体模型。

长实体模型时需事先不挑数据库里之发明,即生成空模型,然后打开edmx文件,在范浏览器中选中实体模型,在性质被把DDL生成模板改化SSDLToOracle.tt
(VS),数据库生成工作流改化Generate Oracle Via T4
(TPT).xaml
(VS)。

累加实体模型时要事先不挑数据库里之说明,即生成空模型,然后打开edmx文件,在范浏览器中选中实体模型,在性被拿DDL生成模板改化SSDLToOracle.tt
(VS),数据库生成工作流改成为Generate Oracle Via T4
(TPT).xaml
(VS)。

如此做的来由是设DDL生成模板下默认项SSDLToOracle.tt
oracle中的number(1,0)和number(2,0)类型的字段生成的实体性质的类别会是int16,然后运行的时候报映射不配合的错(错误代码2019)。

如此这般做的原故是设DDL生成模板下默认项SSDLToOracle.tt
oracle中之number(1,0)和number(2,0)类型的字段生成的实业性之种会是int16,然后运行的下报映射不兼容的缪(错误代码2019)。

报错原因是oracle从ODP.NET
12.1.0.2开始吧ef6下新的默认类型映射,官网证实https://docs.oracle.com/cd/E56485\_01/win.121/e55744/entityDataTypeMapping.htm\#ODPNT8303,其中的 New
Default Mappings 段。

报错原因大红鹰葡京会是oracle从ODP.NET
12.1.0.2开头吧ef6使用新的默认类型映射,官网证实https://docs.oracle.com/cd/E56485\_01/win.121/e55744/entityDataTypeMapping.htm\#ODPNT8303,其中的 New
Default Mappings 段。

SSDLToOracle.tt模板生成的性质之花色是number(1,0)对应boolean,number(2,0)对应byte,这个相应关系以及新映射是平的。

SSDLToOracle.tt模板生成的性之型是number(1,0)对应boolean,number(2,0)对应byte,这个相应关系和新映射是相同的。

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

相关文章

admin

网站地图xml地图