Entity Framework6 with Oracle

Entity Framework6 with Oracle(可实现code first)

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

时间: 2024-07-28 23:25:00

Entity Framework6 with Oracle的相关文章

【转】Entity Framework6 with Oracle(可实现code first)

Oracle 已在2014年底提供对EF6的支持.以前只支持到EF5.EF6有很多有用的功能 值得升级.这里介绍下如何支持Oracle   一.Oracle 对.net支持的一些基础知识了解介绍. 1.早年的时候,微软自己做的有 System.Data.OracleClient. 现在已经成了过期类了.性能等都不是很好. 2.Oracle 官方出的odp.net  Oracle.DataAccess.dll(非托管版本) 还要分32/64位.而且很麻烦的是 部署的时候 需要装客户端环境.非常繁琐

Entity Framework6 with Oracle(可实现code first)

Oracle 与2个月前刚提供对EF6的支持.以前只支持到EF5.EF6有很多有用的功能 值得升级.这里介绍下如何支持Oracle   一.Oracle 对.net支持的一些基础知识了解介绍. 1.早年的时候,微软自己做的有 System.Data.OracleClient. 现在已经成了过期类了.性能等都不是很好. 2.Oracle 官方出的odp.net  Oracle.DataAccess.dll(非托管版本) 还要分32/64位.而且很麻烦的是 部署的时候 需要装客户端环境.非常繁琐.

Entity Framework6 with Visual Studio 2013 update3 for Oracle 11g

2014年7月的时候,写了一篇关于EF5 with visual studio 2010 for oracle 11g的博文 原文地址 :http://www.cnblogs.com/HouZhiHouJueBlogs/p/3844028.html,现在oracle已经支持到EF6了.技术更新快,有些细节如不记录下来,很容易被遗忘,故有此篇博文. Oracle 对.net支持的一些基础知识了解介绍 1.早年的时候,微软自己做的有 System.Data.OracleClient. 现在已经成了过

ODAC的安装以及Entity Framework for Oracle 基本配置

1.安装ODAC 根据自己操作系统x86,x64来判断下载的ODAC版本 http://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html 安装过程中,注意配置你所选择数据库服务器的位置和服务名 2.项目添加Entity Framework 此处连接地址注意修改,因为我自己是本地连接的,所以我当时服务器配置的是127.0.0.1,如果是远程连接,请在ODAC的安装目录下修改连接地址和相关信息(如下图

C#------Entity Framework6的T4模板的使用

转载: http://www.cnblogs.com/Zhangzhigang/articles/4850549.html 1.新建一个.tt文件 2.打开.tt文件 3.粘贴入以下代码即可(inputFile文件的路径根据实际情况进行修改) <#@ template language="C#" debug="false" hostspecific="true"#> <#@ include file="EF6.Util

Entity Framework6 访问MySQL

先用PM命令安装EF6 Install-Package EntityFramework 配置修改如下 <?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrar

使用nuget包下载Entity Framework6.0无法使用模型类与数据库上下文自动生成controller与view

解决方法:卸载掉原有的6.0版本EF,从控制台安装5.0版本的. >工具>库程序包管理器>程序包管理器控制台.在PM>后面输入安装命令. 命令如下 Install-Package EntityFramework -Version 5.0.0.0 以下是提示: 正在安装“EntityFramework 5.0.0”. 您正在从 Microsoft 下载 EntityFramework,有关此程序包的许可协议在 http://go.microsoft.com/fwlink/?LinkI

Entity Framework6学习笔记(一)

技术的发展真是太快了,转眼间已经是第6个版本,现在抓紧时间学习一下!进入正题…… 前提条件: 1.联网 2.平台:在Visual Studio 2013 3.数据库:SQL Server 2008R2 一.在项目中引入Entity Framework框架支持: 1.检查在项目中有没有引用EntityFramework和EntityFramework.SqlServer库文件: 2.如果没有则点击工具—NuGet程序包管理器—管理解决方案的NuGet程序包… 3.打开程序包管理界面搜索entity

Mvc5+Entity Framework6 之二----在MVC中用Entity Framework实现基本的CRUD

目标:创建控制器和视图的代码,实现CRUD(创建,读取,更新,删除)功能 创建一个详细信息页 控制器为Students的Index页生成的代码排除Enrollments属性在外,因为该属性中关联着一个集合.而该集合的内容将会在Details页面 <table>标签中显示. 在控制器Controllers\StudentController.cs的代码中使用Find方法为Details视图取出单个Student实体. public ActionResult Details(int? id) {