BT

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

作者 朱永光 发布于 2008年8月18日 | 被首富的“一个亿”刷屏?不如定个小目标,先把握住QCon上海的优惠吧!

在本系列的第一篇新闻中,介绍了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通知我

讨论
提供反馈
错误报告
商务合作
内容合作
Marketing
InfoQ.com及所有内容,版权所有 © 2006-2016 C4Media Inc. InfoQ.com 服务器由 Contegix提供, 我们最信赖的ISP伙伴。
北京创新网媒广告有限公司 京ICP备09022563号-7 隐私政策
BT

We notice you’re using an ad blocker

We understand why you use ad blockers. However to keep InfoQ free we need your support. InfoQ will not provide your data to third parties without individual opt-in consent. We only work with advertisers relevant to our readers. Please consider whitelisting us.