写点什么

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

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

关注

评论

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

文心一言 VS 讯飞星火 VS chatgpt (69)-- 算法导论6.5 8题

福大大架构师每日一题

福大大架构师每日一题

面向金融科技方向选手!一级学会背书,AI选股与可视分析大赛来啦

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

文心大模型企业应用私享会·上海站:共话大模型前沿技术与产业应用创新

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

openGauss-graph 0.1.0版本正式发布

daydayup

统一观测|借助 Prometheus 监控 ClickHouse 数据库

阿里巴巴云原生

阿里云 云原生 Prometheus Clickhouse

Last Week in Milvus

Zilliz

非结构化数据 开源社区 Milvus Zilliz

openGauss 3.1.0 版本gs_stack功能解密

daydayup

拜托,别在agent中依赖fastjson了

夏奇

Java Agent 类加载 架构设计 Fastjson

TE智库 |《中国CLM(合同全周期管理)市场产业全景研究报告》发布,看合同管理赋能企业战略落地

TE智库

如何在Windows上将iOS应用上传到App Store

【我与openGauss的故事系列】奇思妙想——通过Go语言自制安装openGauss二进制程序(二)

daydayup

PoseiSwap:首个基于模块化设施构建的订单簿 DEX

西柚子

DBMind索引推荐功能在民生银行的生产实践

daydayup

敏捷产品路线图管理实例,产品路线图工具

顿顿顿

Scrum 敏捷开发管理 产品路线图工具

覆巢之下(1)

于哲

openGauss企业级开源数据库荣获2022年度中国计算机学会(CCF)科技进步奖特等奖

daydayup

大模型真的会“好事多模”吗?

脑极体

大模型

开放原子开源基金会理事长孙文龙一行赴山东大学考察交流

开放原子开源基金会

开源 开放原子开源基金会

运维让我优化SpringBoot启动速度,我是这么干的!

高端章鱼哥

运维 Spring Boot 后端

2023模式识别课程师资培训会重磅招募

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

【我与openGauss的故事系列】奇思妙想——通过Go语言自制安装openGauss二进制程序(一)

daydayup

Ansible自动化部署安装openGauss 3.1.0 企业版

daydayup

开放原子开源基金会TOC(技术监督委员会)第七十七次全体会议

开放原子开源基金会

Sprint Boot学习路线3

小万哥

Java spring 后端 springboot SpringCloud

windows如何上架ios应用到app store

雪奈椰子

京东云正式加入openGauss社区,共筑数据库科技服务供应链

daydayup

openGauss的高效数据压缩算法

daydayup

RocketMQ 在业务消息场景的优势详解

阿里巴巴云原生

阿里云 RocketMQ 云原生

PoseiSwap:首个基于模块化设施构建的订单簿 DEX

股市老人

PoseiSwap:首个基于模块化设施构建的订单簿 DEX

BlockChain先知

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