写点什么

Entity Framework 6 中的抽象接口和抽象基类

  • 2013-06-20
  • 本文字数:723 字

    阅读完需:约 2 分钟

作为 Beta 1 版本的一部分,Entity Framework 6 为 DbSet 添加了新的 AddRange 和 RemoveRange 方法,来支持批量插入和删除。这两个方法都接受一个 IEnumerable 类型的参数,并在调用 SaveChanges 的时候对其进行处理。同时 DbSet 还增加了一个 FindAsync 方法。

添加这些方法给 Entity Framework 小组带来了设计问题。为了使 DbSet 可测试,他们引入了之匹配的接口 IDbSet。理论上任何模拟类都会实现该接口。但为抽象接口添加新方法属于重大(破坏性的)修改,你会怎么做呢?

Entity Framework 小组考虑过的一些想法包括:

  • 做出这种重大修改。Sun 在 Java 7 中为 JDBC 接口添加新方法时也走的这个路子。
  • 使 DbSet“可模拟”。也就是说为其添加一个受保护的构造函数,并将所有方法标记为 virtual。如果使用了这个受保护的构造函数,则所有方法都被视为无操作无用途的覆盖。IDbSet 可以标记为废弃的,因为它对于真正的 DbSet 来说已经没什么用了。
  • 使用带委托的扩展方法。对于真正的 DbSet,扩展方法将调用 DbSet 的方法。如果仅仅是 IDbSet,将使用反射来找到匹配的方法进而调用。毫无疑问,这会使测试变慢,并且丢失了静态类型的安全性。
  • 创建新的接口 IDbSet2。(以后可能还会有 IDbSet3、IDbSet4 等)。

EF 小组的选择记录在 5 月 16 日的设计会议纪要中,

我们决定让 DbSet 可模拟。不过我们不会将 IDbSet 标记为废弃,以为目前使用 IDbSet 而不需要新成员的人减少创建工作。我们将为 IDbSet 添加文档,指明新代码最好使用 DbSet,并根据反馈决定是否在未来弃用 IDbSet。

如果你对 Entity Framework 以往的设计决策感兴趣,可以查看 2012 年 3 月 31 日以来的所有设计会议纪要

查看英文原文 Abstract Interfaces vs Abstract Base Classes in Entity Framework 6

2013-06-20 09:293019
用户头像

发布了 59 篇内容, 共 24.1 次阅读, 收获喜欢 3 次。

关注

评论

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

Pipy 实现 SOCKS 代理

Flomesh

HTTP Service Mesh 服务网格 Pipy 流量管理

玩转机密计算从 secGear 开始

openEuler

开源 操作系统 openEuler 机密计算

荣誉+1,龙蜥荣获“2022年度杰出开源运营团队”奖项

OpenAnolis小助手

开源 InfoQ 运营 获奖 龙蜥团队

云原生安全系列 5:ETCD 安全加固

HummerCloud

etcd Kubernetes, 云原生, eBPF

工信部电子标准院授予阿里巴巴9个开源项目“优秀”评级

云布道师

阿里云

1 📖 《JavaScript高级程序设计》__ 什么是JavaScript?

HoMeTown

JavaScript #读书 前端‘’

如何使用极狐GitLab 机器人大幅提升研发效率

极狐GitLab

项目管理 DevOps 机器人流程自动化 极狐GitLab 研发效率

eBPF SIG年度动态: eBPF和Wasm深度融合、参与7场活动及2023展望 | 龙蜥 SIG

OpenAnolis小助手

Linux 开源 ebpf 龙蜥社区 sig

ElasticSearch必知必会-进阶篇

京东科技开发者

ES 集群 索引技术 Elastic Search 企业号 1 月 PK 榜

Disney 流媒体广告 Flink 的应用实践

Apache Flink

大数据 flink 实时计算

“低代码+PaaS”的技术创新实践

元年技术洞察

方舟 低代码 数字化转型 低代码平台

3 📖 《JavaScript高级程序设计》__ 语言基础(上)

HoMeTown

JavaScript 前端 读书 js

马蜂窝如何利用 APISIX 网关实现微服务架构升级

API7.ai 技术团队

api 网关 APISIX envoy ingress Kubernetes, 云原生, eBPF

企业的数据存储、处理与分析之道

云布道师

阿里云 云存储

MatrixOne入选艾瑞数据库研究报告啦~

MatrixOrigin

分布式数据库 国产数据库 MatrixOrigin MatrixOne 艾瑞咨询

运联智库发布2022供应链及合同物流百强排行榜

联营汇聚

BI 可视化工具不只有视图,还有报表

搞大屏的小北

数据可视化工具 DataEase

2023年1月中国数据库排行榜:OceanBase 持续两月登顶,前四甲青云直上开新局

墨天轮

数据库 opengauss tdsql 国产数据库 polarDB

为什么数字化转型需要“低代码”?

元年技术洞察

DevOps 低代码 数字化转型 低代码平台

mysql 中字段的 collate 和 charset 有什么区别

ModStart

LED显示屏都需要4个配套设施

Dylan

LED显示屏 户外LED显示屏 led显示屏厂家

岁末年初捷报频传 HashData斩获多项行业殊荣

酷克数据HashData

数据库·

如何打造一个“无需激励”自运转的技术团队?

石云升

极客时间 复盘 激励 1月月更 技术领导力实战笔记

使用 NineData 实现备份集的实时查询

NineData

数据库 数据 NineData 备份集 实时备份

华为运动健康服务Health Kit 6.9.0版本新增功能揭秘!

HarmonyOS SDK

HMS Core

2 📖 《JavaScript高级程序设计》__ HTML中的JavaScript

HoMeTown

JavaScript 前端 读书 js

3 📖 《JavaScript高级程序设计》__ 语言基础(下)

HoMeTown

JavaScript 前端 读书 js 前端面试

研发团队绩效考核:Leader 如何做到赏罚分明?

石云升

极客时间 复盘 1月月更 技术领导力实战笔记

【Dubbo3 终极特性】「云原生三中心架构」带你探索 Dubbo3 体系下的配置中心和元数据中心、注册中心的原理及开发实战(中)

洛神灬殇

dubbo 注册中心 配置中心 Dubbo3 元数据中心

dcm4che 解析 修改 保存 dicom文件

JefferLiu

虚拟化技术浅析第二弹之初识Kubernetes

京东科技开发者

云计算 容器 微服务 #Kubernetes# 虚拟化技术

Entity Framework 6中的抽象接口和抽象基类_架构_Jonathan Allen_InfoQ精选文章