VS2010+Oracle11+Entity Framework4.1环境搭建及常见问题
在微软的实体数据模型中存在四种查询方式:
SQL字符串;Linq;Linq to SQL;Linq to Entity(ESQL)
对于Linq SQL目前微软虽然仍在支持,但微软已经声明不再推荐。
实体数据模型是微软推出的重头数据模型,利用该数据模型使得数据库服务器与编程工具IDE彻底分离,开发人员无需关心数据库设计人员是如何设计数据库的,两边人员相互隔离,而二者之间的桥梁就是Entity Framework 实体架构。本文将着重介绍自己在学习EF过程遇到的、值得给大家提个醒的困难和问题。
本文首先给出两个链接:
Oracle Data Provider For .Net与 Microsoft OracleClient的性能对比
http://www.oracle.com/technetwork/topics/dotnet/index-154765.html
所有支持MS Entity Framework框架的Data Provider
http://msdn.microsoft.com/en-us/data/dd363565
好的下面开始搭建VS2010+Oracle11+Entity Framework4.1环境
首先在不考虑数据库的情况下,您得先搭建好VS中的EF环境啊
此时需要两个安装插件:
(1)EFtools这个就在VS2010的安装包里,默认是不安装的,现在您只需把他找出来,并安装即可。这个插件的作用是为实体数据模型提供代码模板。
(2)Entity Framework4.1:这才是真正的EF框架的编程模型,这个在微软官网可以下载的到,好像现在已经升级到
EF6了吧。
好的,这两个安装完毕后,在VS中添加新建项的时候,你会发现多了几个选项。

此时,VS中的EF环境已经搭建完毕,下面开始处理Oracle环境了。
首先要下载Oracle Data Provider For .Net,真正名称应该是
ODAC 12c Release 1 (12.1.0.1.0) with Oracle
Developer Tools for Visual Studio
地址为:
http://www.oracle.com/technetwork/developer-tools/visual-studio/downloads/index.html
安装完数据库服务器端之后,就可以直接安装该软件,而无需安装以前的那种Oracle Client,神奇吧,我感觉这就是ODP最大的优势,你完全可以不用安装数据库客户端了。
安装完毕后
我们就可以直接在VS中添加实体数据模型了。
过程如下



要是不安装ODP的话,这里是没有Oracle的哦!


下图就是EF针对Oracle数据库所做的实体映射的结果:

“上下文”就是指一个Contex,这个概念大家没必要去咬文嚼字了,其本质就是在编程层面沟通.Net与Oracle实体数据库之间。
“实体”才是我们关注的重点,一个“实体”就是我们在数据库中建立的一个表结构,包含:列、约束条件等。
比如我数据库中有一张表叫做“ImageThumbnail”,那么.Net实体数据模型中必然会生成一个ImageThumbnail类,该类的属性就是该表的列结构,该类的导航属性就是该表的约束条件,如外键等。下图就是一个表的 实体数据模型类。

好的,讲到这里,实际上就已经讲完了,下面就说一下我遇到的问题。在讲问题之前首先讲一下实体数据库的连接字符串
<add name="Entities" connectionString="metadata=res://*/DBOperation.YYZLDataModel.csdl|res://*/DBOperation.YYZLDataModel.ssdl|res://*/DBOperation.YYZLDataModel.msl;provider=Oracle.DataAccess.Client;provider connection string="DATA SOURCE=192.168.90.218/orcl;PASSWORD=orcl;USER ID=YINGYIN""
providerName="System.Data.EntityClient" />
这个字符串我们可以把它拆为4段:
(1)metadata=res://*/DBOperation.YYZLDataModel.csdl|res://*/DBOperation.YYZLDataModel.ssdl|res://*/DBOperation.YYZLDataModel.msl;
元数据,表示Oracle数据库中的数据模型,在.Net中的XML表示,但实际上VS将.csdl ssdl msl三种文件融合为一个.edmx文件了。
(2)provider=Oracle.DataAccess.Client;
这个比较重要,下面要单独解释
(3)provider connection string="DATA SOURCE=192.168.90.218/orcl;PASSWORD=orcl;USER ID=YINGYIN"
这个不用解释了,这个就是传统的数据库连接字符串
(4)providerName="System.Data.EntityClient"
System.Data.EntityClient 命名空间是 Entity Framework 的 .NET Framework 数据提供程序。
EntityClient 提供程序使用存储特定的 ADO.NET 数据提供程序类和映射元数据与实体数据模型进行交互。 EntityClient 首先将对概念性实体执行的操作转换为对物理数据源执行的操作。 该提供程序将从物理数据源返回的结果集转换为概念性实体。
下面重点解释:
provider=Oracle.DataAccess.Client;这是一个程序集的名称,这个程序集用于将EntityClient 的操作结果,解释为Oracle识别的操作,并作用于Oracle数据库,这个程序集它不是默认VS自带的,而是通过machine文件配置出来的,所以假如没有这个程序集,你的程序能够编译成功,但是却不能运行,因为你的任何数据操作离开这个数据集都无法实现和Oracle的沟通。
你安装Oracle Data Provider For .Net之后 会在GAC中C:\Windows\Microsoft.NET\assembly\GAC_32\Oracle.DataAccess\v4.0_4.112.3.0__89b483f429c47342\
存在一个程序集Oracle.DataAccess.dll,同时在VS的机器配置文件
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config中也会多一个节点:
<add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
大家看到 invariant="Oracle.DataAccess.Client" 了吗,这就是相当于在VS2010的开发环境中配置了别名Oracle.DataAccess.Client,所以你如果没有安装
Oracle Data Provider For .Net或者该处的invariant与连接字符串中的provider名字不一样,你就会出现如下错误:
“指定的存储区提供程序在配置中找不到,或者无效。 ---> System.ArgumentException: 找不到请求的 .Net Framework Data Provider。可能没有安装。”。
你如果对VS中DLL编译原理很了解的话,此时就应该晓得了,我只要下载一个Oracle.DataAccess.dll和配置machine.config就可以了,完全没必要安装.Net Framework Data Provider。嗯哼你答对了,这篇博文就是这么做的:
http://blog.csdn.net/rrrrssss00/article/details/7178515
在开发过程中我的程序也出现了上面提到的那种错误,但是我的EF环境完美无瑕啊,为什么不能运行呢,这个问题真的是无解。后来一个很巧的机会我发现只要把VS的配置环境改为32位即可,要是AnyCPU的话,也会出错,唉。自己记着就行了。
VS2010+Oracle11+Entity Framework4.1环境搭建及常见问题的更多相关文章
- VS2010+Oracle11+Entity Framework4.1环境搭建及常见问题(转)
一,开场白: 在微软的实体数据模型中存在四种查询方式:SQL字符串:Linq:Linq to SQL:Linq to Entity(ESQL) 对于Linq SQL目前微软虽然仍在支持,但微软已经声明 ...
- react native的环境搭建中常见问题
搭建完成android的环境,我们就可以继续我们的react native环境的搭建了. 当然,按照fb的安装流程来完成rn的搭建. http://facebook.github.io/react-n ...
- VS2010+Qt5.4.0 环境搭建(离线安装)
原创作者:http://blog.csdn.net/solomon1558/article/details/44084969 前言 因项目需要Qt开发GUI,我根据网上资料及自己的经验整理了搭建vs2 ...
- 【OSG学习笔记之一:】OSG+VS2010+win7 64位环境搭建
虽然出生的时候,没有说过“Hello World!”,但是自从走上了编程之路,每一次输出“Hello World!”的时候,都觉得好比中了彩票大奖似的: 仔细算算,从2012年暑假到现在,经历了3年半 ...
- OSG+VS2010+win7环境搭建---OsgEarth编译
OSG+VS2010+win7环境搭建---OsgEarth编译 转:http://www.cnblogs.com/hnfxs/p/3161261.html Win7下 osg+vs2010环境搭建 ...
- 最新OpenCV2.4.6与VS2010开发环境搭建
OpenCV2.4.6与VS2010开发环境搭建 由于很久没有用OpenCV了,之前用的是1.0版本和VC++6.0.现在已经到了VS2010+OpenCV2.4.6.安装使用之后,发现OpenCV的 ...
- OSG+VS2010+win7环境搭建
Win7下 osg+vs2010环境搭建 一.相关准备 a) Osg源代码 当前最新版:OpenSceneGraph的3.0.0.zip 下载链接: http://www.openscenegraph ...
- win10 + VS2010 + OpenCV2.4.10重编译OpenCV开发环境搭建
win10 + VS2010 + OpenCV2.4.10重编译OpenCV开发环境搭建 重编译的优点:能够调试的时候看OpenCV的源码. 重编译要得到的东西:Debug版本号和Release版本号 ...
- ObjectARX环境搭建之vs2010+objectArx2012+AutoCAD2012
---------------------------------------------------------------------------------------------------- ...
随机推荐
- JDBC远程连接数据库
使用jdbc远程连接数据库(非本地数据库)出现的问题可用的解决方法: 1.修改mysql配置文件 配置文件中注释掉 bind-address=127.0.0.1 2.修改数据库 登入mysql后,更改 ...
- ECMAScript5新特性之isFrozen、freeze
对象被冻结后: 1 不能添加属性. 2 不能删除属性. 3 不能修改属性.(赋值) 4 不能修改属性描述符.(会抛异常) var fruit = { name : '苹果', desc : '红富士' ...
- jquery 动态添加的代码不能触发绑定事件
今天发现jQuery对动态添加的元素不触发事件,比如blur.click事件等 参考文章证明了我的结论,并给出了原因及解决方案 原因:程序找不到动态添加的节点. 解决方案:在绑定父元素后的子元素 $( ...
- 批量去重URL地址并剔除打不开网址
#coding=utf-8 import os import httplib import socket dictlist ={}; def ReadHost(): hosts = []; obn = ...
- phpcms中调用外部网站数据
1.在phpcms后台模块->模块管理->数据源->外部数据源 中 添加外部数据源 2.在phpcms前台模板中,使用get标签获取数据源中数据. {pc:get sql=" ...
- Spring框架之CGLIB的代理技术(代码了解)
1.引入CBLIB的开发包 * 如果想使用CGLIB的技术来生成代理对象,那么需要引入CGLIB的开发的jar包,在Spring框架核心包中已经引入了CGLIB的开发包了.所以直接引入Spring核心 ...
- 『SpringMVC』<context:include-filter>&<context:exclude-filter>爬坑
原文地址:https://segmentfault.com/a/1190000012972619 大家好,我是猪弟,猪在我心中从来不是蠢的代名词,而是懒的代名词,本次准备记录一个在开发测试过程中遇到的 ...
- Legendre多项式
Legendre多项式 时间限制: 1 Sec 内存限制: 128 MB 题目描述 Legendre多项式的递归公式
- 2017年UX设计流行的六大趋势
UX设计在接下来的2017年会有怎样的发展趋势呢?让我们一起回顾去年用户体验设计领域中的变化,来展望新一年用户体验设计的发展趋势吧. 1. 原型制作的爆炸性增长 随着用户体验设计师和用户界面设计师 ...
- struts2 的 ServletActionContext 和 actionContext,服务器代码测试, redirect 、dispatcher、chain、redirectAction
一.ServletActionContext 和 actionContext HttpServletRequest request=ServletActionContext.getRequest() ...