InfoQ

新闻

迈向Data 2.0——在客户端操作ADO.NET数据服务

作者 朱永光 发布于 2008年8月18日 上午12时9分

社区
.NET
主题
.NET框架,
数据访问,
Web服务
标签
WCF,
服务设计,
ADO.NET实体框架,
ADO.NET

在本系列的第一篇新闻中,介绍了ADO.NET数据服务框架的基本知识;昨日ccBoy在其博客上发表了一篇文章,介绍了在客户端如何对ADO.NET数据服务进行操作。

本文章以下图所示的关系图来作为练习的数据库(图片引用自ccBoy的博客):

在这个关系图中,需要特别注意的一点是,Book表上的Author ID字段消失了:

Entity Framework屏蔽和封装了Book表中Author ID属性,从而让客户端或用户看起来也更加面向对象。

接着,ccBoy在这个数据库关系的基础上为大家提供了如下9种类型标准操作的示例代码:

  1. 新增一个作者和他的一本书。
  2. 新增一个作者,但不增加书。
  3. 给一个给定的作者,增加一本书的记录
  4. 修改作者的基本信息,并更新,但未修改作者和书的关联关系
  5. 修改书的基本信息,并更新;但未修改作者和书的关联关系
  6. 改变一个已关联的作者和书的关系,将书关联到另外一个作者。
  7. 删除给定作者的一本书。
  8. 删除一个作者,目前作者没有创作任何一本书。
  9. 删除一个作者,也包括他创作了所有书的记录。

除了以上的9类操作外,他也给出了一种处理异常的示例代码,值得大家借鉴。

在逐一展示了这些示例代码后,ccBoy对ADO.NET数据服务的操作进行了一个总结,如下的总结对于理解在客户端对ADO.NET数据服务进行操作有很大的帮助:

四个 CRUD 操作(Create、Retrieve、Update 和 Delete)中的每个操作都映射到一个不同的 HTTP 动词:Retrieve 映射到 GET,Create 映射到 POST,Update 映射到 PUT,Delete 映射到 DELETE。

客户端的Context对象,你可以把它想像成离线版本的数据源Entity Framework Context。

客户端所有的CUD的操作,只有在调用SaveChanges(),才会将变化传送到真正的数据源。

SetLink,AddLink,DetachLink是进行实体关系管理的……DetachLink是在你要删除某个实体,你需要将有关联的两个实体之间的关联打断并告诉客户端的Context。而DeleteLink更多的是告诉客户端Context,你要将两个实体间的关联完全打断,这个方法有用,但我觉得它的实用性最低。

AttachTo和Detach则是你用了处理实体状态的主要方法……当你调用AttachTo作用于一个POCO对象的时候,这个对象变成了实体……Detach方法你可以将其理解成反操作,即将一个实体还原成POCO。

有时候AttachTo操作是隐形的,比如所有通过Context查询方法查询来的对象,其实都是实体,同样你将一个POCO对象赋值给一个实体对象时,似乎也默认会将这个POCO对象加入到客户端Context中。

AddToXXX(比如:AddToAuthor)是Entity Framework自动生成的简易方法,其实和调用AddObject方法等同。

最后,ccBoy对ADO.NET数据服务和ADO.NET实体框架进行了一些讨论,涉及到和NHibernate比较,对编程模型和系统构架的影响,以及一些性能方面的探讨等。

深度内容

功能小组模型的过程与质量控制

InfoQ中文站最近采访了微软的Ramesh,在采访中,Ramesh从过程控制、架构与设计的控制以及测试组织等方面分享了他所带领Visual Studio软件生命周期管理工具团队使用敏捷方式组织管理大规模软件团队方面的经验。

张文钿谈Rails开发及台湾Ruby社区

在去年10月份的Kungfurails大会上,InfoQ中文站有幸采访了从台湾专程赶过来的张文钿,与他探讨了关于台湾Ruby社区的发展、Rails的商业化,Restful Design等话题。

Scrum与策略

如果Scrum只关乎短期行为,战略人士又该如何去适应这种生态系统呢?更重要的是,它如何帮助企业领导人做出并且履行重要的承诺?

书评:《代码之道》

《代码之道》以一位微软内部人士的视角,揭示了关于软件编码、软件测试和项目管理的残酷现实。针对每一个话题,I.M.Wright都根据丰富的工作经验提出了自己的观点,并介绍了来龙去脉,令人信服。

洪强宁谈豆瓣网技术架构

如何应对高并发、大访问量?如何保证数据的安全性以及数据库大吞吐量?在海量数据下,如何进行数据表变更?DoubanFS以及DoubanDB的特点以及技术实现?在QConBeijing 2009期间,InfoQ中文站有幸采访了洪强宁,探讨了相关话题。

淘宝网架构师岳旭强的年度展望

淘宝网资深架构师岳旭强结合自己的实际工作,从数据扩展性、关注系统和人的交互,以及关注可用性等方面做了总结和展望。

大型团队中的敏捷开发

在1月份举办的Scrum敏捷实战营中,钟鸣从微软研发团队敏捷开发的最佳实践角度与大家探讨了大型团队中的敏捷开发。

Richard Durnall谈系统管理和从外向内的组织结构

敏捷极限编程、精益软件开发及在线产品开发专家Richard Durnall谈对系统管理理论的理解和应用,以及从外向内的组织结构策略。