写点什么

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

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

关注

评论

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

听GPT 讲Deno源代码(5)

fliter

TiDB 与MySQL优化器在特定语句下执行效果对比(一)

TiDB 社区干货传送门

性能调优 实践案例 版本测评

听GPT 讲Deno源代码(3)

fliter

TIKV 分布式事务--乐观事务 2PC 概览

TiDB 社区干货传送门

TiDB 底层架构 TiKV 源码解读

听GPT 讲Deno源代码(2)

fliter

TiDB 7.5.0 LTS 高性能数据批处理方案

TiDB 社区干货传送门

新版本/特性解读

TiFlash亿级多表关联优化实践,从无法跑出结果优化到2.59秒

TiDB 社区干货传送门

性能调优 实践案例 OLAP 场景实践

年青DBA应该学习的数据库之TiDB

TiDB 社区干货传送门

数据库架构设计 数据库前沿趋势

汽车零部件MES系统实施方案

万界星空科技

汽车 mes 万界星空科技 汽车零部件

华为音乐用AI送上新年佳曲,花式祝福迎龙年新春

最新动态

跨越财务困境,聚道云软件连接器如何助力企业轻松实现数字化转型?

聚道云软件连接器

案例分享

php作业1

大肚皮狒狒

2023年总结

wood

Optimism为 CQT提供价值 20 万美元的生态系统资助,以表彰其支持

股市老人

新年新岁,好运 long long

阿里云CloudImagine

云计算 视频云

听GPT 讲Deno源代码(4)

fliter

TiDB 与MySQL优化器在特定语句下执行效果对比(二)

TiDB 社区干货传送门

性能调优 实践案例 版本测评 新版本/特性发布 6.x 实践

使用 TiKV 读改写 TiDB 数据

TiDB 社区干货传送门

TiDB 源码解读 TiKV 底层架构

文心一言 VS 讯飞星火 VS chatgpt (197)-- 算法导论14.3 5题

福大大架构师每日一题

福大大架构师每日一题

初识TiDB的增量数据同步工具TiCDC

TiDB 社区干货传送门

迁移 实践案例 7.x 实践

数据所在,计算随行:Databend 的 2023 年度总结

Databend

京东零售技术小哥带你揭秘:亿级流量高并发春晚互动前端技术

京东零售技术

前端 春晚

华为智慧屏游戏中心合家欢会员免费领!春节团聚畅玩《小小炸弹人》等合家欢游戏

最新动态

听GPT 讲Rust Tokio源代码(8)

fliter

听GPT 讲Deno源代码(6)

fliter

考研失败如何快速找到编程工作?

王磊

Java 考研

【奖项公布】首届全球 TiDB 文档挑战赛圆满收官!来看看前五名花落谁家!

TiDB 社区干货传送门

阿里云-负载均衡(ALB)

智慧源点

ALB

听GPT 讲Deno源代码(1)

fliter

Java break、continue 详解与数组深入解析:单维数组和多维数组详细教程

小万哥

Java 程序人生 编程语言 软件工程 后端开发

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