我们知道发布REST WCF服务时,为了跨语言要求服务的参数和返回值都是简单对象(POCO类)。但当结合ADO.NET Entities Framework时,这些EntityObject 却不是我们想要的简单对象。有没有别的办法发布一个简单对象?好在ADO.NET团队发布了一个ADO.NET POCO Entity Generator项目模板利用T4代码生成可以将EF的相对复杂的EntityObject转换成一个POCO类。使用方法可以看这里:http://blogs.msdn.com/b/adonet/archive/2010/01/25/walkthrough-poco-template-for-the-entity-framework.aspx
先看看不使用POCO Entity发布的REST WCF服务是怎样的情况。创建一个WCF Rest Application工程:
1. 准备:
创建一个 Northwind DB EF,并对应的创建一个REST服务:
注意必须将 EF 的 LazyLoadingEnabled 和 ProxyCreationEnabled 都设为false,否则调用会出错。
2. 运行并查看一下返回的内容(使用Fiddler发起一个Http请求,查看Response(XML格式)):
明显在xml中多了很多EF定义的序列化信息。这对于客户端反序列化带来一定的难度,尤其是作为参数传递对象的时候,拼接这样格式的XML非常的麻烦。
再看看把上面的 ResponseFormat 改为 WebMessageFormat.Json 的结果:
Oh,NO~ 直接就挂了。服务端对于 EntityObject 无法序列化成Json格式?
---------------- POCO分界线 ------------------
接下来请出 ADO.NET POCO Entity Generator 进行野猪大改造,剥离一些多余的属性:
1. 切换到 Northwind.edmx 的Model Browser中,右击Model项目:(在edmx视图的空白处右键也可以)
2. 选择 "ADO.NET POCO Entity Generator" 模板:
3. 将会有安全提示问是否要在本地生成代码,按下OK后就生成了POCO的代码,并将原来EF Design.cs里的原来的代码都删除了。
改造后的EntityObject,属性变成只有 get; set;, Navigation Property 也由EntityCollection<T>变为ICollection<T>:
再次运行,可以和未使用POCO类型的返回结果比较下看看是不是清爽了很多?
现在再来看看修改为 Json 格式,OK这次没问题了。
话说回来既然连 ObjectContext 也是用 T4 重新生成的,那么下面两句代码也通过 T4 生成就不用每个服务方法里都去设定了。
db.ContextOptions.LazyLoadingEnabled = false;
db.ContextOptions.ProxyCreationEnabled = false;
查看 Northwind.context.tt 的代码,在最后可以看到下面的代码:
把上面第11行:
this.ContextOptions.LazyLoadingEnabled = <#=isLazyLoading.ToString().ToLowerInvariant()#>
修改为:
this.ContextOptions.LazyLoadingEnabled = false;
this.ContextOptions.ProxyCreationEnabled = false;
生成的ObjectContext的构造函数中就会添加上面的两句代码,所有服务方法就不用设定上面属性了。
使用 ADO.NET POCO Entity Generator 进行改造的EF,使得我们可以在服务端可以使用Linq2EF的ORM良好支持,又使得客户端不必为复杂的数据格式而烦恼,是在REST WCF应用中的一大利器。
分享到:
相关推荐
Ado.Net Entity Framework+WCF的一个Demo
基于spring.net EntityFramework 实现WCF服务层,有MVC测试等等,后面就是为了凑数了
The ADO.NET Entity Framework from Microsoft is a new ADO.NET development framework that provides a level of abstraction for data access strategies and solves the impedance mismatch issues that exist ...
HYPERLINK"http://blog.csdn.net/fangxinggood/article/details/6762632"WCF实例——WindowsServiceHost开发,调试,制作安装包本篇实例介绍如何使用WindowsService来寄宿WCF服务:1.添加WCFServiceLibrary工程,这...
asp.net+wcf+entity framework
[Packt Publishing] WCF 4.5 多层服务开发 —— 使用 Entity Framework 技术 第3版 [Packt Publishing] WCF 4.5 Multi-Layer Services Development with Entity Framework 3rd Edition (E-Book) ☆ 出版信息:☆ ...
WCF+Silverlight+EntityFramework+Sqlite所做的学生信息管理系统,自己闲暇时间做着玩的,页面什么的比较丑,不过不要在意那些细节……数据库采用Sqlite,非常小的一个数据库,我就不提供了,网上一大堆,表结构什么...
英文版:Professional ADO.NET 3.5 with LINQ and the Entity Framework 内容简介 《ADO.NET 3.5高级编程:应用LINQ&Entity; Framework》由知名的微软数据库权威专家Roger Jennings编写,凝聚了Roger多年的数据库...
You'll find new chapters covering all the important new features that make .NET 4.6 the most comprehensive release yet, including:, A Refined ADO.NET Entity Framework Programming ModelNumerous IDE ...
A Refined ADO.NET Entity Framework Programming Model Numerous IDE and MVVM Enhancements for WPF Desktop Development Numerous updates to the ASP.NET Web APIs This comes on top of award winning coverage...
A Refined ADO.NET Entity Framework Programming Model Numerous IDE and MVVM Enhancements for WPF Desktop Development Numerous updates to the ASP.NET Web APIs This comes on top of award winning coverage...
ADO.NET Data Services Framework 由满足以下条件的模式和库组合而成:支持将数据公开为一项基于 REST(具象状态传输)的灵活数据服务,企业网络内部或整个 Internet 上的 Web 客户端都可以使用该服务。ADO.NET Data...
Get a thorough introduction to ADO.NET Entity Framework 4 - Microsoft's core framework for modeling and interacting with data in .NET applications. The second edition of this acclaimed guide provides ...
Chapter 1: Introducing the ADO.NET 4.0 Entity Framework..................................1 Chapter 2: The Entity Data Model ........................................................13 Chapter 3: The ...
内 容 简 介:Get a thorough introduction to ADO.NET Entity Framework 4 --Microsoft's core framework for modeling and interacting with datain .NET applications. The second edition of this acclaimed ...
Entity Framework的全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框架。 Entity Framework的主要特点: 1. 支持多种数据库(Microsoft SQL Server, Oracle, and DB2)...
经典视频教程,希望大家好好利用 <br>讲 师:徐晓卓 微软最有价值专家 长沙萌微科技有限公司首席技术...在第二次课程中,我们将详细介绍如何设计基于.NET 3.0 WCF的全新的企业应用的具有高度可伸缩性的服务。
WCF Rest Service Example in Asp.net
WCF实例(基于TCP协议的配置)