Oracle+Entity Framework+WCF RIA Service+SilverLight4.0

来源:互联网 发布:linux如何执行sql文件 编辑:程序博客网 时间:2024/05/21 21:50


装完ODAC for Beta_EntityFramework后,VS2010的数据源就有Oracle数据库的选项,可以连接Oracle数据库

在测试连接Oracle时一直失败,ORA-12154错误。

【原因】

装ODAC时安装新版本Oracle客户端,VS2010里的Oracle链接组件对应新装的Oracle客户端,而新客户端并没有添加tnsnames.ora和sqlnet.ora文件

解决方案

1、将老版本(10.2版本)的tnsnames.ora和sqlnet.ora拷贝到新装版本(11.2版本)所对应的文件夹下

2、有了配置信息后需重启开发工具(VS 2010)方能连接相应的数据库


项目所需,需采用Oracle+Entity Framework+WCF RIA Service+SilverLight4.0搭建开发框架

第一次接触这些东西,我决定还是把它记下来,对于健忘的我,这是很重要的。

回顾一下一周的努力

【安装 ODAC for Beta_EntityFramework】
说明:安装ODAC for Beta_EntityFramework后,VS2010 数据库连接项多了一个“Oracle数据库”,VS2010 EntityFramework就能够支持Oracle数据库了。

过程:安装很顺利,测试不顺利

测试:
1、本机PL/SQL连接数据库出现initialization error could not locate OCI dll的错误,详见initialization error could not locate OCI dll
2、VS2010 数据库连接项多了一个“Oracle数据库”,测试连接时出现"ORA-12154"的错误,详见ODAC for Beta_EntityFramework

理解:
安装ODAC for Beta_EntityFramework时默认安装了Oracle Client 11g,导致Oracle的环境变量被修改,而本机的PL/SQL版本是Oracle Client 10g,其Oracle home和OCI library也被修改,所以读不到对应的tnsnames文件和oci.dll。VS2010"Oracle数据库"连接默认是通过ODAC所对应的Oracle Client 11g去连接数据库,因此应该在Oracle Client 11g中的tnanames配置所需的Oracle数据库连接信息。

【配置Entity Frame实体数据模型】
说明:使用VS2010"Oracle数据库"连接实现Oracle数据库映射到VS中的实体数据模型。

过程:由于Oracle版本问题,出现一个错误

测试:Entity Framework error: 'ORA-00904: "SUBPROGRAM_ID": invalid identifier'.'.

理解:
碰到莫名其妙的问题,还是老方法,先谷歌后百度。

【配置SilverLight4.0开发环境】
1、安装VisualStudio2010.NET FrameWork4.0同时被安装

2、安装Silverlight 4 Tools for Visual Studio 2010开发包,在Visual Studio 2010中将会自动更新添加Silverlight 4项目开发模板,以及Silverlight 4 SDK和相关开发环境

3、Silverlight美工开发人员,需安装Microsoft Expression Studio 4 Ultimateblend 4

4、推荐安装Silverlight 4 Toolkit控件包,该控件是微软开发的Silverlight控件扩展包.其中包含数十种扩展控件,可以方便Silverlight项目开发,另外该项目是开源项目,开发人员可以轻松的修改控件,创建自定义控件效果

5、安装Silverlight 4简体中文正式版脱机帮助文档

 

对我来说,WCF应用不熟悉,只觉得配置很麻烦。

Windows Communication Foundation(WCF) 是由微软发展的一组数据通信的应用程序开发接口。它遵循一定的标准,使得Services可以跨平台的读取和使用。WCF封装的是方法,一个服务执行一个特定的任务。

WCF Data Services和WCF RIA Services都是基于WCF,他们都提供REST服务,可以说它们是微软一种提供REST服务的方案。微软的REST遵循OData协议,这样除了遵循一般的REST风格,还支持LINQ,我们可以使用LINQ它们的REST API进行查询和操作。

WCF Data Services能够支持REST API,之所以引入RIA,顾名思义,为了Silverlight。RIA可以用于所有的客户端,RIA服务可以返回XML和JSON两种数据格式,这使得RIA客户端能够轻松的读取和使用数据。WCF开发Silverlight应用时,有以下不足之处
1、逻辑处理定义在服务端,客户端通过调用各种WCF方法来实现业务需求。这样WCF定义复杂,且经常变动,维护困难
2、通信类不好维护,因为其是自动生成的,所做的修改会因重新更新服务引用而丢失,解决方法通常都会在服务端和客户端都构建实体,然而这样处理需做自定义实体的转换,降低了开发效率
这些问题正是RIA解决的问题。RIA所定义的方法必须遵循一定的规则,它支持REST API,而微软的REST API完全基于OData,而基于Odata协议的REST API支持LINQ,这使得我们的业务逻辑完全可以放在客户端,比如我们只需在客户端构建一个不同的LINQ表达式即能完成复杂的业务逻辑,而服务端只是放置一个一个实体,并提供新增、删除、更新的方法即可。

RIA可以支持程序集dll方式发布服务的,而过去,不管是WCF还是ASP.NET都是基于文件名的资源寻址,只不过不同的后缀名采用不同IHttpHandle来处理。原因是RIA是通过反射的方式寻找到DomainService的,RIA 的DomainService的URI是程序运行时产生的,这样RIA可以重用。