博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VS2010+Oracle11+Entity Framework4.1环境搭建及常见问题(转)
阅读量:7229 次
发布时间:2019-06-29

本文共 3504 字,大约阅读时间需要 11 分钟。

一,开场白:

在微软的实体数据模型中存在四种查询方式:SQL字符串;Linq;Linq to SQL;Linq to Entity(ESQL)

对于Linq SQL目前微软虽然仍在支持,但微软已经声明不再推荐。

实体数据模型是微软推出的重头数据模型,利用该数据模型使得数据库服务器与编程工具IDE彻底分离,开发人员无需关心数据库设计人员是如何设计数据 库的,两边人员相互隔离,而二者之间的桥梁就是Entity Framework 实体架构。

本文将着重介绍自己在学习EF过程遇到的、值得给大家提个醒的困难和问题。

本文首先给出两个链接:

Oracle Data Provider For .Net与 Microsoft OracleClient的性能对比

所有支持MS Entity Framework框架的Data Provider

 

好的下面开始搭建VS2010+Oracle11+Entity Framework4.1环境

步骤一,首先在不考虑数据库的情况下,您得先搭建好VS中的EF环境

此时需要两个安装插件:

(1)EFtools这个就在VS2010的安装包里,默认是不安装的,现在您只需把他找出来,并安装即可。这个插件的作用是为实体数据模型提供代码模板。

(2)Entity Framework4.1:这才是真正的EF框架的编程模型,这个在微软官网可以下载的到,好像现在已经升级到 EF6了吧。 

好的,这两个安装完毕后,在VS中添加新建项的时候,你会发现多了几个选项。

此时,VS中的EF环境已经搭建完毕,下面开始处理Oracle环境了。

步骤二: 处理Oracle环境:

首先要下载Oracle Data Provider For .Net,真正名称应该是

ODAC 12c Release 1 (12.1.0.1.0) with Oracle Developer Tools for Visual Studio

地址为:

安装完数据库服务器端之后,就可以直接安装该软件,而无需安装以前的那种Oracle Client,神奇吧,我感觉这就是ODP最大的优势,你完全可以不用安装数据库客户端了。

安装完毕后 我们就可以直接在VS中添加实体数据模型了。

过程如下

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

“上下文”就是指一个环境,这个概念大家没必要去咬文嚼字了,其本质就是在编程层面沟通.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=&quot;DATA SOURCE=192.168.90.218/orcl;PASSWORD=orcl;USER ID=YINGYIN&quot;"

         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三种文件融合为一个.demx文件了。

(2)provider=Oracle.DataAccess.Client;

 这个比较重要,下面要单独解释

(3)provider connection string=&quot;DATA SOURCE=192.168.90.218/orcl;PASSWORD=orcl;USER ID=YINGYIN&quot;

 这个不用解释了,这个就是传统的数据库连接字符串

(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。嗯哼你答对了,这篇博文就是这么做的:

在开发过程中我的程序也出现了上面提到的那种错误,但是我的EF环境完美无瑕啊,为什么不能运行呢,这个问题真的是无解。之后后来一个很巧的机会我发现只要把VS的配置环境改为32位即可,要是AnyCPU的话,也会出错,唉。自己记着就行了。

转载地址:http://ctdfm.baihongyu.com/

你可能感兴趣的文章
ES6简单总结(搭配简单的讲解和小案例)
查看>>
text-decoration与color属性
查看>>
如何使用Mybatis第三方插件--PageHelper实现分页操作
查看>>
PyCharm搭建GO开发环境(GO语言学习第1课)
查看>>
Android交互
查看>>
提醒我喝水chrome插件开发指南
查看>>
列表数据转树形数据
查看>>
Java新版本的开发已正式进入轨道,版本号18.3
查看>>
从零开始的webpack生活-0x009:FilesLoader装载文件
查看>>
在electron中实现跨域请求,无需更改服务器端设置
查看>>
gitlab-ci配置详解(一)
查看>>
听说你叫Java(二)–Servlet请求
查看>>
案例分享〡三拾众筹持续交付开发流程支撑创新业务
查看>>
FreeWheel业务系统微服务化过程经验分享
查看>>
移动互联网下半场,iOS开发者如何“高薪”成长?
查看>>
Atlassian是怎样进行持续交付的?且听 Steve Smith一一道来
查看>>
Web Storage相关
查看>>
[PHP内核探索]PHP中的哈希表
查看>>
Apache-drill Architechture
查看>>
WordPress 5.2 Beta 3 发布,要求 PHP 5.6.20 以上版本
查看>>