【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

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

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

关注

评论

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

拼多多根据ID取商品详情原数据 API 实现实时数据获取的完整指南

Noah

QuickLinks for Mac(菜单栏快捷命令)v3.2激活版

iMac小白

getIRC-IRC Client for Mac( IRC 聊天客户端工具) v1.5直装版下载

iMac小白

软件测试开发/全日制/测试管理丨Web、App 测试不同场景定位方式

测试人

软件测试

软件测试/测试开发/全日制 | 使用Vue.js构建单页应用(SPA)

测吧(北京)科技有限公司

测试

软件测试/测试开发/全日制 |构建基于机器学习的实时推荐系统

测吧(北京)科技有限公司

测试

软件测试/测试开发/全日制/测试管理丨自动化测试框架UI Automator

测试人

打造自主品牌的体育赛事直播平台,无需开发源码搭建

软件开发-梦幻运营部

必须知道了解的40个SEO专业术语!

九凌网络

使用云桌面对于企业来说是否值得?

青椒云云电脑

桌面云 云桌面 云桌面解决方案 云桌面系统

Solidity之旅(十八)内联汇编 [inline assembly]

BSN研习社

Linguist for Mac(mac菜单栏语言翻译工具)v3.2激活版下载

iMac小白

一文解析Web缓存代理

不在线第一只蜗牛

Web 前端开发 web开发

软件测试/测试开发/全日制 |理解JavaScript的异步编程模型

测吧(北京)科技有限公司

测试

14代酷睿亮相!华硕天选5 Pro新配置开售,比13代贵500元值吗

E科讯

EzyCal for Mac(日历管理和提醒工具)v2.3激活版

iMac小白

低代码与小程序开发:简化创新,加速应用开发

EquatorCoco

小程序 低代码 程序开发

软件测试/测试开发/全日制/测试管理丨移动自动化测试框架Appium

测试人

软件测试

如何使用 NFTScan NFT API 在 Fantom 网络上开发 Web3 应用

NFT Research

API NFT\ NFTScan

9 个让你的 Python 代码更快的小技巧

快乐非自愿限量之名

Python 开发 开发语言

Snagit for mac(最强大的屏幕截图软件)v2023.2.6中文版下载

iMac小白

JavaFx项目至安装程序

alexgaoyh

JavaFx exe4j 桌面应用 Inno Setup Compiler jre运行环境

软件测试/测试开发/全日制 |理解Web应用性能优化的关键技术

测吧(北京)科技有限公司

测试

软件测试/测试开发/全日制/测试管理丨Appium Server

测试人

软件测试

2024 爱分析 · AI 与大模型高峰论坛:和鲸喜获两项殊荣!

ModelWhale

人工智能 大数据 数据智能 大模型 前沿

游戏被攻击,有没有什么好的解决办法

德迅云安全杨德俊

DDoS

软件测试/测试开发/全日制 |理解CORS与跨域资源共享的应用

测吧(北京)科技有限公司

测试

亚马逊API:快速查询全球商品数据的技巧!

技术冰糖葫芦

API

MetaImage for Mac(图像元数据编辑器)v2.6.3中文激活版

iMac小白

Navicat Premium 16 for Mac(数据库管理软件)v16.3.5中文激活版

iMac小白

Ronin 与 Footprint Analytics 宣布合作,探索使用数据赋能 Web3 游戏

Footprint Analytics

区块链 加密货币

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