写点什么

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

  • 2008-08-18
  • 本文字数:1123 字

    阅读完需:约 4 分钟

在本系列的第一篇新闻中,介绍了 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 比较,对编程模型和系统构架的影响,以及一些性能方面的探讨等。

2008-08-18 00:091207
用户头像

发布了 254 篇内容, 共 71.0 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

设计师导航网站合集

小炮

【LeetCode】高度检查器Java题解

Albert

LeetCode 6月月更

Linux开发_介绍BMP图片上下翻转、添加水印

DS小龙哥

6月月更

JavaScrip模块模式

大熊G

JavaScript 前端 6月月更

转:基于Springcloud的服务治理落地实践

小江

Spring Cloud 微服务治理

关于 SAP Spartacus CmsService.getComponentData 可能的优化思路

汪子熙

前端开发 SAP Hybris commerce 6月月更

深入剖析 | 应用层Protocol的标准设计

九叔(高翔龙)

架构 协议 TCP/IP dubbo源码 粘包/拆包

InfoQ 极客传媒 15 周年庆征文|ZooKeeper进阶(一):Zookeeper简介

No Silver Bullet

zookeeper 运维 6月月更 InfoQ极客传媒15周年庆

web前端培训50 个高效编程的前端轮子

@零度

前端开发

一起架构-某实时分析项目云原生 serverless 架构的设计思路和poc代码实现

明哥的IT随笔

云原生 架构设计

Springboot 升级到 2.6.1 的坑

Damon

微服务 微服务架构 Spring Cloud 6月月更

区块链哈希竞猜游戏系统开发(开发方案)

开发微hkkf5566

C#/VB.NET 在Word转PDF时生成目录书签

在下毛毛雨

C# .net PDF word文档 书签

C#入门系列(十三) -- 初识结构体

陈言必行

C# 6月月更

什么是Minio?如何搭建Minio集群?

wljslmz

存储 Minio 集群 6月月更

5个聚合导航网站,资源、工具、素材应有尽有

小炮

vivo大规模 Kubernetes 集群自动化运维实践

vivo互联网技术

Kubernetes operator ansible kubeadm Kubevirt

实战 | 巴啦巴啦SpringBoot变装SpringCloud大佬~

写程序的小王叔叔

架构 微服务 Spring Cloud springboot 6月月更

17张图:读懂国内首个《主机安全能力建设指南》

青藤云安全

网络安全 主机安全 深度网络

大数据培训算法面试题分享

@零度

算法 大数据开发

等个有“源”人|OpenHarmony 成长计划学生挑战赛报名启动

OpenHarmony开发者

OpenHarmony

5月月更开奖!还不来领取?

InfoQ写作社区官方

热门活动 5月月更

实战 |SpringBoot增加Swagger

写程序的小王叔叔

架构 springboot swagger 6月月更

OpenHarmony 开源开发者成长计划解决方案学生挑战赛,等你来参加!

InfoQ写作社区官方

OpenHarmony 热门活动

【sql语句基础】——查(select)(单表查询顺序补充)

写代码两年半

数据库 sql MySQL 数据库 6月月更

Django 项目 MVT 结构

海拥(haiyong.site)

6月月更

龙蜥社区 5 月技术委员会会议顺利召开,新一代操作系统研发路线图发布

OpenAnolis小助手

开源 操作系统 龙蜥社区 技术委员会 新版本

实战 | Win10安装ELK

写程序的小王叔叔

ELK ELK Stack 6月月更

【Python技能树共建】selenium入手篇

梦想橡皮擦

Python 6月月更

实战模拟│企业微信机器人实时报错预警

机器人 企业微信 监控告警 预警 6月月更

中国SaaS产业全景图谱

小炮

迈向Data 2.0——在客户端操作ADO.NET数据服务_.NET_朱永光_InfoQ精选文章