写点什么

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

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

关注

评论

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

IntelliJ IDEA太重量级了?不妨尝试一下新的IDE工具

Java你猿哥

Java emacs ssm IDEA IntelliJ IDEA

【4.21-4.28】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

IM开发干货分享:IM客户端不同版本兼容运行的技术思路和实践总结

JackJiang

网络编程 即时通讯 即时通讯IM

Marior去除边距和迭代内容矫正用于自然文档矫正

合合技术团队

人工智能 OCR 识别

聊聊智能语音交互系统

轻口味

AI 三周年连更

华秋干货铺 | PCB阻抗计算的可制造性设计

华秋电子

看完这篇推特视频怎么下载到手机相册的教程,我又可以了!

frank

twitter

软硬件负载均衡 IP 地址透传

TiDB 社区干货传送门

数据库架构设计 数据库连接

汽车电阻:新能源时代来临,车用电阻市场机遇正在显现

华秋电子

人类 vs AI:玩梗大作战,看看谁是最后的赢家?

LigaAI

测评 ChatGPT 文心一言 GPT-4 企业号 4 月 PK 榜

boot-admin整合Quartz实现动态管理定时任务

Java你猿哥

Java 架构 ssm vue admin springboot整合quartz

AI前沿速报0428:95%开发人员在用AI编程

AI探险家小新

人工智能 编程 程序员 新闻资讯 ChatGPT

太阳能是否能助力LED显示屏节能?

Dylan

节能 LED显示屏 太阳能

牛皮!GitHub上标星90.6K的Java面试指南+笔记

Java你猿哥

Java 程序员 面试 ssm java核心知识点

Java面试很难?啃完阿里老哥这套Java架构速成笔记,我都能拿30K

Java你猿哥

Java 架构 面试 分布式 java基础

阿里大佬纯手写Angular和Spring Boot全栈技能修炼手册

做梦都在改BUG

Java Spring Boot angular 全栈

使用 Vue.js 和 JavaScript 在 Web 应用程序中下载 PDF 文件

海拥(haiyong.site)

三周年连更

Spring Boot扩展:深入分析 IoC 容器

Java你猿哥

Java spring ssm 架构师 spring ioc

一文理清 TiDB 与 MySQL 中的常用字符集及排序规则

TiDB 社区干货传送门

新版本/特性解读 6.x 实践

赋能产业新发展,华秋电子携多高层板积极参与成都工博会

华秋电子

视频剪辑工具:Final Cut Pro 中文版

真大的脸盆

Mac 视频剪辑 Mac 软件 视频处理工具

说一个大家都知道的 Spring Boot 小细节!

江南一点雨

Java springboot

大白话讲解synchronized锁升级套路

做梦都在改BUG

你真的理解 Golang 切片吗?全切片表达式及切片使用技巧

宇宙之一粟

Go 切片 三周年连更

手把手教你成为 TiDB 的 Contributor

TiDB 社区干货传送门

实践案例 故障排查/诊断 TiDB 源码解读

大流量时代,如何规划系统流量提升可靠性

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 4 月 PK 榜

AI新时代拐点:人工智能当红炸子鸡Chatgpt

AI探险家小新

人工智能 程序员 创作 工作 ChatGPT

vivo 推送系统的容灾建设与实践

vivo互联网技术

容灾 推送系统

我用Bitmap实现亿级数据统计

Java你猿哥

Java redis 架构 ssm BitMap

叹服!华为高工手写344页高性能Java架构核心原理实战大神手册

做梦都在改BUG

Java 架构 高并发

Alibaba内部首发“M8级”500页微服务架构手册,GitHub上杀疯了

Java你猿哥

Java 架构 微服务 ssm 架构师

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