写点什么

迈向 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:091173
用户头像

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

关注

评论

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

Docker 中的挂载卷

HoneyMoose

「Go框架」http请求处理流程: gin、beego等web框架是如何处理http请求的?

Go学堂

golang 开源 程序员 个人成长 12月月更

无魅友,不魅族!魅族大力推广魅友文化,用行动阐述何为用户共创

极客天地

DAG任务调度系统 Taier 演进之道,探究DataSourceX 模块

袋鼠云数栈

开源

直呼内行,华为云桌面就是这么专业

IT科技苏辞

华为云数据库助力微鲤科技智能升级

爱科技的水月

如何写一个深度学习编译器

MegEngineBot

深度学习 开源 编译器 MegEngine MegCC

【web 开发基础】PHP数组元素的添加和删除操作 (49)

迷彩

数组 数组操作 PHP基础 先进先出 后进先出

Content-Length使用不规范导致Socket Hang Up问题

Kevin Wu

TCP HTTP HttpClient content-length

华为云数据库GaussDB(for MySQL)全方位守护企业云上数据安全

爱科技的水月

Java高手速成│编写你第一个数据库程序

TiAmo

JDBC 数据库· 12月月更

Code Review到底在关注些什么?

孟君的编程札记

Java CodeReview

转转AB平台的设计与实现

转转技术团队

大数据 A/B 测试

HTTP实体首部字段

穿过生命散发芬芳

HTTP 12月月更

数据代码如何“产地直销”,做到持续集成持续发布?

数造万象

使用 QuTrunk+Amazon ParallelCluster3 进行并行计算

亚马逊云科技 (Amazon Web Services)

亚马逊云科技 Hero 专栏

架构实战营模块三作业

张贺

物联网 IOT 设备如何脱离信息孤岛?

eng八戒

物联网 IoT 网络 网络配置 涂鸦智能

云上数字化时代,华为云桌面助力政企办公升级

IT科技苏辞

Git使用教程之本地仓库的基本操作

芯动大师

git git 学习 Git命令行

MAXHUB+腾讯会议:为未来办公造一部动力引擎

脑极体

大咖说·阿里云教育|“网上浙大”数字化之路

大咖说

数字化 高校

守护企业数据安全,华为云数据库 GaussDB(for MySQL)有绝招

科技之光

这一篇让你彻底搞懂微信生态里的二维码

产品海豚湾

产品经理 产品设计 二维码 微信扫码 SaaS 产品

2022-12-27:etcd是无界面的,不好看,joinsunsoft/etcdv3-browser是etcd的web可视化工具之一。请问在k3s中部署,yaml如何写?

福大大架构师每日一题

云原生 k8s etcd k3s 福大大

基于聚类算法的话术挖掘技术及在营销服场景的落地应用

中关村科金

人工智能 大数据 算法 对话机器人 技术实践

如何在 15 分钟内度量 DORA 指标?

思码逸研发效能

研发效能

丧心病狂,竟有Thread.sleep(0)这种神仙写法?

JAVA旭阳

Java JVM

企业金融App评测系列——微众银行以App构筑企业金融服务新生态,成为企业的随身数字银行

易观分析

企业 金融 银行

企业数据上云,华为云数据库 GaussDB(for MySQL)轻松解决

科技之光

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