1. 程式人生 > >Entity Framework6 with Oracle(可實現code first)

Entity Framework6 with Oracle(可實現code first)

最好 lba cat 上下 strong 還要 nload elb 復制代碼

Oracle 與2個月前剛提供對EF6的支持。以前只支持到EF5。EF6有很多有用的功能 值得升級。這裏介紹下如何支持Oracle

一.Oracle 對.net支持的一些基礎知識了解介紹。

1.早年的時候,微軟自己做的有 System.Data.OracleClient。 現在已經成了過期類了。性能等都不是很好。

2.Oracle 官方出的odp.net Oracle.DataAccess.dll(非托管版本) 還要分32/64位。而且很麻煩的是 部署的時候 需要裝客戶端環境。非常繁瑣。

3.Oracle 官方近年新出的 Oracle.ManagedDataAccess.dll 這個非常給力 不再區分32/64位了。 而且不需要客戶端再安裝東西了。性能也得到了提高。不管是用ado.net或者其他ORM框架

都建議使用此版本dll。這次我們的EF6 也會依據此dll進行開發。

官方下載地址是這個 一定要去官方下載最新的 才能支持EF6 我從nuget上下的版本較低 不支持。。

http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html (當時下載的版本為4.121.2.0)

下載好後 從這個目錄下 odp.net\managed\common 拿出2最關鍵的dll

Oracle.ManagedDataAccess.dll 和 Oracle.ManagedDataAccess.EntityFramework.dll

二.修改webconfig配置文件

加入如下代碼:

技術分享圖片
 <configSections>
    <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.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />-->  
  </configSections>

  <entityFramework>
    <defaultConnectionFactory type="Oracle.ManagedDataAccess.EntityFramework.OracleConnectionFactory,
Oracle.ManagedDataAccess.EntityFramework,
Version=6.121.2.0,
Culture=neutral,
PublicKeyToken=89b483f429c47342" />
    <providers>
      <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.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.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </DbProviderFactories>
  </system.data>
技術分享圖片

連接字符串如下 記得提供下 providerName 為 Oracle.ManagedDataAccess.Client

技術分享圖片
 <connectionStrings>

    <add name="OraString" connectionString="Data Source= (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = *****)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCL)
    )
  );User ID=*****;Password=*****;Persist Security Info=True" providerName="Oracle.ManagedDataAccess.Client" />

  </connectionStrings>
技術分享圖片

這裏還有個註意事項,因為有的人以及裝了oracle的客戶端。這可能會導致一些錯誤。這裏 請註意檢查下 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config

下的 machine.config (64位的話 路徑是 Framework64,最好都檢測下)

machine.config 可以理解為webconfig的父類 所以我們需要檢查下裏面的內容 是否有

 <section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />

這樣的內容 如果有 修改版本號Version 為當前Oracle.ManagedDataAccess.Client版本。

三.註意事項

1.訪問時提示表不存在,有可能權限不夠。需要設置默認的Schema 需要在 OnModelCreating設置

modelBuilder.HasDefaultSchema(“Schema名”);

2.oracle 的配置是否配置了使用ora方式來訪問。 建議先不使用ora方式,有可能是這個方式訪問導致的問題。

3.oracle 訪問的問題 一定多去官網看下。

推薦幾篇

http://docs.oracle.com/cd/E56485_01/win.121/e55744/toc.htm

http://docs.oracle.com/cd/E56485_01/win.121/e55744/entityMigrate.htm#BABEHEFE

Entity Framework6 with Oracle(可實現code first)