BT

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

作者 朱永光 发布于 2008年8月18日 |

在本系列的第一篇新闻中,介绍了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账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

深度内容

提供反馈
错误报告
商务合作
内容合作
InfoQ.com及所有内容,版权所有 © 2006-2013 C4Media Inc. InfoQ.com 服务器由 Contegix提供, 我们最信赖的ISP合作伙伴。
隐私政策
BT