最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

使用ef6創(chuàng)建oracle數(shù)據(jù)庫(kù)的實(shí)體模型遇到的問(wèn)題及解決方案

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:25:47
文檔

使用ef6創(chuàng)建oracle數(shù)據(jù)庫(kù)的實(shí)體模型遇到的問(wèn)題及解決方案

使用ef6創(chuàng)建oracle數(shù)據(jù)庫(kù)的實(shí)體模型遇到的問(wèn)題及解決方案:解決方案中的數(shù)據(jù)層項(xiàng)目最初使用的是oracle 11g + ef5 創(chuàng)建的實(shí)體模型,在分頁(yè)時(shí)遇到了skip參數(shù)為0報(bào)錯(cuò)的問(wèn)題,沒有找到相關(guān)資料。 于是決定升級(jí)到ef6,在oracle官網(wǎng)中得知,Oracle Data Provider for .NET in ODAC 12c Release
推薦度:
導(dǎo)讀使用ef6創(chuàng)建oracle數(shù)據(jù)庫(kù)的實(shí)體模型遇到的問(wèn)題及解決方案:解決方案中的數(shù)據(jù)層項(xiàng)目最初使用的是oracle 11g + ef5 創(chuàng)建的實(shí)體模型,在分頁(yè)時(shí)遇到了skip參數(shù)為0報(bào)錯(cuò)的問(wèn)題,沒有找到相關(guān)資料。 于是決定升級(jí)到ef6,在oracle官網(wǎng)中得知,Oracle Data Provider for .NET in ODAC 12c Release

解決方案中的數(shù)據(jù)層項(xiàng)目最初使用的是oracle 11g + ef5 創(chuàng)建的實(shí)體模型,在分頁(yè)時(shí)遇到了skip參數(shù)為0報(bào)錯(cuò)的問(wèn)題,沒有找到相關(guān)資料。

于是決定升級(jí)到ef6,在oracle官網(wǎng)中得知,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.數(shù)據(jù)層項(xiàng)目的.net版本改成4.5以上,使用nuget安裝 EntityFramework 6 +Oracle.ManagedDataAccess +Oracle.ManagedDataAccess.EntityFramework,都安裝最新穩(wěn)定版。

安裝后app.config和web.config都會(huì)被加入如下配置項(xiàng)

<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中的版本號(hào),nuget安裝后自動(dòng)生成的一般沒問(wèn)題,我在安裝之前把網(wǎng)上找的資料里的配置項(xiàng)放在里面了,但是版本號(hào)不一致,程序啟動(dòng)不了,一直沒注意到版本號(hào),

找了好一會(huì)才發(fā)現(xiàn)是這兩個(gè)地方。

3.然后就可以添加實(shí)體模型了。此時(shí)如果vs中顯示找不到與ef6 兼容的實(shí)體框架提供程序,需要將配置文件中的ef節(jié)的 <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />刪掉或者注釋掉,保存后再重新嘗試添加實(shí)體模型。

添加實(shí)體模型時(shí)需要先不選擇數(shù)據(jù)庫(kù)里的表,即生成空模型,然后打開edmx文件,在模型瀏覽器中選中實(shí)體模型,在屬性中把DDL生成模板改成SSDLToOracle.tt (VS),數(shù)據(jù)庫(kù)生成工作流改成Generate Oracle Via T4 (TPT).xaml (VS)。

這么做的原因是如果DDL生成模板使用默認(rèn)項(xiàng)SSDLToOracle.tt ,oracle中的number(1,0)和number(2,0)類型的字段生成的實(shí)體屬性的類型會(huì)是int16,然后運(yùn)行的時(shí)候報(bào)映射不匹配的錯(cuò)誤(錯(cuò)誤代碼2019)。

報(bào)錯(cuò)原因是oracle從ODP.NET 12.1.0.2開始為ef6采用新的默認(rèn)類型映射,官網(wǎng)說(shuō)明https://docs.oracle.com/cd/E56485_01/win.121/e55744/entityDataTypeMapping.htm#ODPNT8303,其中的 New Default Mappings 段。

SSDLToOracle.tt模板生成的屬性的類型是number(1,0)對(duì)應(yīng)boolean,number(2,0)對(duì)應(yīng)byte,這個(gè)對(duì)應(yīng)關(guān)系與新映射是一致的。

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

總結(jié)

以上所述是小編給大家介紹的使用ef6創(chuàng)建oracle數(shù)據(jù)庫(kù)的實(shí)體模型遇到的問(wèn)題及解決方案,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

使用ef6創(chuàng)建oracle數(shù)據(jù)庫(kù)的實(shí)體模型遇到的問(wèn)題及解決方案

使用ef6創(chuàng)建oracle數(shù)據(jù)庫(kù)的實(shí)體模型遇到的問(wèn)題及解決方案:解決方案中的數(shù)據(jù)層項(xiàng)目最初使用的是oracle 11g + ef5 創(chuàng)建的實(shí)體模型,在分頁(yè)時(shí)遇到了skip參數(shù)為0報(bào)錯(cuò)的問(wèn)題,沒有找到相關(guān)資料。 于是決定升級(jí)到ef6,在oracle官網(wǎng)中得知,Oracle Data Provider for .NET in ODAC 12c Release
推薦度:
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top