AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

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

关注

评论

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

Ember Data 之记录查询

devpoint

store ember.js 10月月更

回忆录:「技术主管」练成记

蔡建斌

管理 引航计划 内容合集

【初恋系列】那年的试卷我们再肝一遍(试卷存储详细设计)

人工智能~~~

存储 详细设计 那年的试卷我们再肝一遍 试题

【LeetCode】窥探迭代器Java题解

Albert

算法 LeetCode 10月月更

【Flutter 专题】37 图解 Flutter 基本动画 (二)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 10月月更

🍃【SpringBoot技术专题】「开发实战系列」动态化Quartz任务调度机制+实时推送任务数据到前端

码界西柚

springboot quartz DeferredResult 任务调度 10月月更

果然爆发!!!央行数字货币要在这“特殊”的一天正式推出?

CECBC

云原生训练营20210915-作业1

笑春风

在线base64加密解密工具

入门小站

工具

架构实战营 - 模块九作业

Julian Chu

架构实战营

【LeetCode】 第三大的数Java题解

Albert

算法 LeetCode 10月月更

golang--进程,线程,协程调度

en

Go 语言

项目开发过程中,成员提离职,怎么办?

石云升

项目管理 管理 引航计划 内容合集 10月月更

代码要写注释了吗?

HelloWorld杰少

领航计划

008云原生之Serverless架构

穿过生命散发芬芳

云原生 10月月更

Netflix实用API设计(下)

俞凡

架构 netflix API 大厂实践 10月月更

区块链技术可以在哪些方面颠覆石油和天然气行业?

CECBC

linux之man命令

入门小站

Linux

Netflix实用API设计(上)

俞凡

架构 netflix API 大厂实践 10月月更

【Spring源码分析】带你正视一下Spring祖容器之BeanFactory的原理与功能分析(1)

码界西柚

spring 容器 spring源码 BeanFactory 10月月更

0 基础架构入门 - 5(微博评论的高性能高可用计算架构)

felix

架构实战营 0 基础架构入门

容器 & 服务:Helm Charts(三)K8s集群信息

程序员架构进阶

架构 Kubernetes 容器 Helm Charts 10月月更

【Vuex 源码学习】第七篇 - Vuex 的模块安装

Brave

源码 vuex 10月月更

Jupyter Notebook从入门到精通,TensorFlow一个计算机视觉示例 易筋 ARTS 打卡 Week 68

John(易筋)

ARTS 打卡计划

架构实战营模块9作业

喻高咏        

架构实战营

一种基于Kotlin DSL的静态代码分析AST规则扩展实现

maijun

Java dsl 静态代码分析 结构化规则 规则扩展

5. 再次接触装饰器,增加一种数据结构代替 if_else 的写法

梦想橡皮擦

10月月更

移动端网络监控实践

轻口味

android 大前端 网络协议 引航计划 10月月更

架构实战营 模块九(毕业设计) 作业

一雄

作业 架构实战营 毕业设计 模块九

新技术|基于信号特征的语音编码器Lyra Android实践

轻口味

android 音视频 引航计划 10月月更

Python代码阅读(第32篇):随机返回列表中的一个元素

Felix

Python 编程 Code Programing 阅读代码

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