在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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:293447
用户头像

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

关注

评论

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

未来3年,公司想不倒闭,就尽量避免在这5点上犯错!

CRMEB

TiDB 在 Pinterest丨从 HBase 到 TiDB:我们如何实现零停机在线数据迁移

TiDB 社区干货传送门

文盘Rust -- 如何把配置文件打包到二进制文件里

TiDB 社区干货传送门

开发语言

leetcode 543. Diameter of Binary Tree 二叉树的直径(简单)

okokabcd

Java LeetCode 数据结构与算法

直播回顾|容器如何提升应用的稳定性?(附PPT下载)

BoCloud博云

云计算 容器 云原生

神器 SpringDoc 横空出世!最适合 SpringBoot 的API文档工具来了

Java快了!

SP【ring

严禁外传,字节跳动2022秋招Java岗位架构师面试题(暂定版)发布

钟奕礼

Java 编程 程序员 架构 java面试

开源公开课丨ChengYing安装原理剖析

袋鼠云数栈

强扩展、强一致、高可用…GaussDB成为游戏行业的心头爱

华为云开发者联盟

数据库 后端 开发 游戏 企业号九月金秋榜

历经70+场面试,我发现了大厂面试的bug,并总结其中心得

钟奕礼

Java 编程 架构 java面试

字节码增强技术之 Java Agent 入门

Java快了!

java;

数字藏品:为什么这么火爆,那么多人购买?

开源直播系统源码

区块链+ NFT 数字藏品 数字藏品开发 数字藏品系统

基于TiCDC同步的主从集群数据校验

TiDB 社区干货传送门

备份 & 恢复

推理网络精度不达标,5个方法轻松搞定

华为云开发者联盟

人工智能 网络 算子 企业号九月金秋榜

直击行业痛点,华为云助力实景三维建设更快更好

sofiya

面试以前上司,能力一般,不想给他通过,但他卑微哀求,怎么办?

钟奕礼

Java 编程 架构 面试 后端

ChunJun Meetup演讲分享 | 基于袋鼠云开源框架的数仓一体化建设探索

袋鼠云数栈

TiDB监控节点扩缩容操作(是否保留历史数据)

TiDB 社区干货传送门

监控 集群管理 备份 & 恢复 扩/缩容

运维去大公司好还是小公司好?你怎么看?

行云管家

运维 IT IT运维

工赋开发者社区 | Transformers如何用于遥感?阿联酋MBZUAI最新《Transformers遥感处理》综述,涵盖60+种ViT遥感方法

工赋开发者社区

【JS】大白话-深拷贝与浅拷贝-及其原生JS实现方式

Sam9029

JavaScript 前端 深拷贝 浅拷贝 9月月更

使用 JDBC 连接 TiDB Cloud

TiDB 社区干货传送门

开发语言 应用适配 数据库连接

画一个 “月饼” 陪我过中秋,玩转炫彩 “月饼” 之 基本测试

矜辰所致

中秋 月饼 ESP32-C3 9月月更

Java 序列化10倍性能优化对比测试

FunTester

TiUniManager部署和使用感受

TiDB 社区干货传送门

集群管理 安装 & 部署 6.x 实践

TiDB跨版本升级--新人首次尝试🧐

TiDB 社区干货传送门

迁移 实践案例 集群管理 管理与运维 备份 & 恢复

强强联合!数衍科技携手华为云助力企业生态数据建设

sofiya

B2B企业节,永洪科技

科技云未来

不下载软件,可以把电脑本地文件快速传到远端服务器里吗?

行云管家

服务器 云端 远程 本地

袋鼠云产品功能更新报告01期丨用诚心倾听您的需求

袋鼠云数栈

泪洒阿里,面试惜败闭关2月金九银十再战Alibaba!

钟奕礼

Java 编程 架构 后端 java面试

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