写点什么

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

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

关注

评论

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

今天不写代码,聊聊热门的知识图谱

码农参上

人工智能 机器学习

【FAQ】接入HMS Core广告服务中的常见问题总结和解决方法

HarmonyOS SDK

广告sdk

架构的核心要素

源字节1号

软件开发 前端开发 软件架构 后端开发

倒计时 1 天|洞察数字化转型新机遇,共论云上数据分析新观点

Kyligence

数据分析 指标管理

理解virt、res、shr之间的关系(linux系统篇)

京东科技开发者

Linux 内存 系统 内存映射 Linux操作系统

Java基础——数据类型

守夜人st

9月月更

不止于《幻塔》,云底座护航完美世界迎接行业新时代

阿里云弹性计算

游戏 ECS

【火热招募】一文看懂华为云IoT Edge边缘计算开发者大赛技术亮点

华为云开发者联盟

IoT 边缘计算 华为云 企业号九月金秋榜

京东前端二面高频react面试题

Geek_07a724

前端 React

2022前端二面react面试题

Geek_07a724

前端 React

基于lio-sam框架,教你如何进行回环检测及位姿计算

华为云开发者联盟

人工智能 企业号九月金秋榜

一文了解 Java 中的构造器

华为云开发者联盟

Java 开发 企业号九月金秋榜

Intel全新加速指令AMX技术介绍&eBPF在低版本内核如何跑起来?今天3点见 | 第45-46期

OpenAnolis小助手

芯片 ebpf intel 龙蜥大讲堂 amx

数据脱敏前沿实践分享,筑造数据安全边界 | 极客星球

MobTech袤博科技

加密 数据安全

移动App开发的痛点怎样解决

Geek_99967b

小程序

复享光学承担的上海市2022年度科学仪器领域项目获批立项

硬科技星球

Python基础(四) | 程序控制结构

timerring

Python. 9月月更

Java——标识符、关键字和保留字

守夜人st

9月月更

从静态、动态到全站,看阿里云“全站加速”的技术演进

阿里云视频云

CDN 边缘计算 加速

政务服务平台建设的难点怎样解决

Geek_99967b

小程序 小程序容器

研发效能之环境管理

laofo

DevOps cicd 研发效能 持续集成 持续交付

5分钟get一个技术点!揭秘一种加密框架的技术实现

Java-fenn

Java

java基础——运算符

守夜人st

9月月更

三个案例,带你体验SQL的神奇特性

华为云开发者联盟

数据库 后端 sql 企业号九月金秋榜

【云原生】Kubernetes编排工具精讲

陈橘又青

云原生 9月月更

Nacos 和 Apollo中的 长轮询 定时机制,太好用了

Java快了!

Nacos 和 Apollo中的

两个优秀的分布式消息流平台:Kafka与Pulsar

博文视点Broadview

Flink 侧流输出源码解析

JasonLee实时计算

flink 源码

组装式App小程序化,加速企业效率式研发

Speedoooo

小程序 APP开发 组装式应用

小程序生态能否助力国产系统

Geek_99967b

小程序 小程序容器

亿铸科技聚焦国产存算一体AI大算力芯片,28纳米工艺实现10倍能效比

硬科技星球

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