硬核干货——《中小企业 AI 实战指南》免费下载! 了解详情
写点什么

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

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

关注

评论

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

作为最好用的可观测平台,如何监控 Grafana

耳东@Erdong

Grafana Prometheus 5月日更

聊聊人像抠图背后的算法技术

华为云开发者联盟

hilens 抠图 工程 抠图算法 baseline

test1

靠谱哥

Arthas-技术专题-使用指南

码界西柚

Arthas 5月日更

怎样做好服务提供方

程序员架构进阶

架构设计原则 服务化 28天写作 5月日更

不忘过去,不畏将来

小天同学

5月日更 汶川地震 不忘过去

一文带你读懂PyQt:用Python做出与C++一样的GUI界面应用程序

老猿Python

音视频在智能手表上的应用

anyRTC开发者

音视频 WebRTC IoT RTC

单片机I/O控制方式(UART中断和DMA中断的区别)

不脱发的程序猿

嵌入式 单片机 GPIO的原理、特性 单片机I/O设备的控制方式

深度剖析 | 关于数据锁定和读取一致性问题

VoltDB

数据库 数据分析 5G

微服务转型系列4:理念指导实践,厘清微服务建设的主要内容和顺序

BoCloud博云

微服务

如何让消息队列达到最大吞吐量?

万俊峰Kevin

微服务 消息队列 Queue Go 语言

给Java小白,整理一套能上手的简单编程算法题!!!

小傅哥

Java 程序员 数据结构 算法 小傅哥

【LeetCode】停在原地的方案数Java题解

Albert

算法 LeetCode 5月日更

华为中国生态大会2021举行在即,GaussDB将重磅发布5大解决方案

华为云开发者联盟

数据库 opengauss 华为云 GaussDB 云数据库

python str模块

若尘

Python编程 str 5月日更

GitHub开源:狗屁不通文章生成器

不脱发的程序猿

GitHub 开源 狗屁不通文章生成器

参照STM32时钟树配置STM32CubeMX Clock Configuration(STM32L011G4U6为例)

不脱发的程序猿

单片机 STM32微控制器 时钟树 STM32CubeMX STM32时钟配置

追寻软件定义的梦想汽车

车骑

自动驾驶 智能汽车 软件定义汽车 汽车制造

VMWare中Ubuntu网络配置

进击的梦清

Linux 运维 vmware 网络配置

最近又有出什么新电影,要不要停泊片刻,与好友相约一起来去看呢?

叶小鍵

51CTO熊平:HarmonyOS是大势所趋

科技汇

ThreadLocal不好用?那是你没用对!

王磊

Java 后端 多线程 ThreadLocal 5月日更

声网、新东方、伴鱼英语的音视频技术解读

Jessie

音视频 视频消音

华为云官网负责人明哥:我们是如何做到门面不倒,8个月挑战业界翘楚?

华为云开发者联盟

JavaScript node.js Serverless 云原生 大前端

SpringBoot技术专题—来看看异步处理返回方案

码界西柚

Java WebAsyncTask 5月日更 AsyncContext DeferredResult

Fluid 进入 CNCF Sandbox,加速大数据和 AI 应用拥抱云原生

阿里巴巴云原生

人工智能 容器 云原生 调度 弹性计算

PyQt5 实现可空值的 QDateTimeEdit

一代咩神

Python PyQt QDateTimeEdit

Nginx性能分析之gpreftools

运维研习社

nginx 性能分析 5月日更

百信银行基于 Apache Hudi 实时数据湖演进方案

Apache Flink

大数据 flink

真实的DevOps落地,应该是这样的 ↓

BoCloud博云

DevOps 敏捷开发

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