【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

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

关注

评论

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

R 和 Python用于统计学分析,哪个更好?

Jackpop

洞见科技牵头的全球「首个」IEEE隐私计算「互联互通」国际标准正式启动

洞见科技

隐私计算 IEEE 互联互通

视频爆炸时代,谁在支撑视频生态网高速运行?

郑州埃文科技

flow IP地址 NetFlow

机器学习实践:基于支持向量机算法对鸢尾花进行分类

华为云开发者联盟

人工智能 模型 华为云

Development status of full color LED display

Dylan

LED display full-color LED display Outdoor LED display

10款超牛Vim插件,爱不释手了

Jackpop

天翼云乘风新基建,构建数字化转型“4+2”能力体系

天翼云开发者社区

安全信得过!天翼云数据安全管理平台通过评测

天翼云开发者社区

短视频源码开发,优质的短视频源码需要做好哪几点?

开源直播系统源码

软件开发 短视频源码

ironSource Luna 推出苹果搜索广告限时优惠,注册即享3个月免费服务

科技热闻

入驻快讯|欢迎极狐GitLab 正式入驻 InfoQ 写作社区!

极狐GitLab

gitlab git 学习 #GitLab DevOps工具

网页制作存在的一些难点

源字节1号

华为云招募工业智能领域合作伙伴,强力扶持+商业变现

华为云开发者联盟

云计算 华为云 工业数据智能

新版负载均衡WebClient CRUD

Damon

微服务架构 微服务框架 6月月更

Java不支持协程?那是你不知道Quasar!

码农参上

协程 Java后端

企业级软件开发新模式:低代码

力软低代码开发平台

畅享高性能计算!天翼云HPC解决方案来了

天翼云开发者社区

Vue-17-组件

Python研究所

6月月更

知识管理在业务中的价值如何体现

小炮

知识管理

wallys/WiFi6 MiniPCIe Module 2T2R 2×2.4GHz 2x5GHz

wallys-wifi6

wifi6 mtk7915 mtk7975

IntelliJ IDEA中有什么让你相见恨晚的好用插件?

Jackpop

2022年中国重卡智能化升级专题研究

易观分析

智能汽车

MongoDB在腾讯零售优码中的应用

杨亚洲(专注MongoDB及高性能中间件)

mongodb 分布式数据库mongodb 构架 NoSQL 数据库 数据库·

uni-app进阶之https请求方式/状态管理【day11】

恒山其若陋兮

6月月更

如何为政企移动办公加上一道“安全锁”?

WorkPlus

什么是RESTful,REST api设计时应该遵守什么样的规则?

wljslmz

RESTful 6月月更

VHEDT业务发展框架

凌晞

框架 构架

web技术分享| 【高德地图】实现自定义的轨迹回放

anyRTC开发者

前端 Web 音视频 地图 轨迹回放

DAP事实表加工汇总功能应用说明

agileai

数据分析 数据集成 数仓建设 基础事实表 汇总事实表

【Meetup 预告】RocketMQ OpenMLDB Connector,实时数据到特征工程的高速传输

第四范式开发者社区

机器学习 数据库 开源 云原生 特征平台

"不敢去怀疑代码,又不得不怀疑代码"记一次网络请求超时分析

华为云开发者联盟

前端 开发 HTTP 华为云

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