写点什么

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

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

关注

评论

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

掌握C++中static关键字的多种使用场景

小万哥

c++ 程序员 后端 开发 static

测试用例设计指南

京东科技开发者

软件测试 测试用例

当你对 redis 说你中意的女孩是 Mia

京东科技开发者

c++ 数据库 redis 缓存 企业号 3 月 PK 榜

TLS、SSL、CA 证书、公钥、私钥。。。今天捋一捋!

江南一点雨

gRPC TLS CA ssl

运维训练营第18周作业

好吃不贵

ClickHouse为什么这么快

数新网络官方账号

Clickhouse

贪心算法思想与练习

timerring

贪心算法

集成Health Kit时因证书问题出现错误码50063的解决方案

HarmonyOS SDK

HMS Core

用友BIP丨事项会计,助力企业跻身世界一流

用友BIP

天天预约 | 预约小程序分销功能,最全的操作指南来啦!

天天预约

小程序 SaaS 系统 预约工具 分销

Last Week in Milvus

Zilliz

非结构化数据 Milvus 向量数据库

ProTradex是链上衍生品领域发展的强力推手

鳄鱼视界

全新升级|ECS成熟度评估与洞察,助你精准定位运维风险

云布道师

ECS

8设计消息队列存储消息数据的 MySQL

KING

用友BIP推动大型企业财务从“价值反映和守护”走向“价值发掘和创造”

用友BIP

智能会计 价值财务

架构训练营 - 模块七作业

Sam

架构实战营

C++编程必备:对象生命周期管理的最佳实践

小万哥

c++ 后端 生命周期 对象模型 RAII

美团二面:细数 Redis 阻塞的9种情况

Java redis 面试

智能控制 | AIRIOT智慧楼宇管理解决方案

AIRIOT

物联网 智慧楼宇

三天吃透MongoDB面试八股文

程序员大彬

Java mongodb

微信小程序管理软件有哪些特点?

没有用户名丶

微信小程序

大模型落地比趋势更重要,NLP+金融如何看得见、摸得着?

脑极体

AI金融

深入理解C++右值引用和移动语义:全面解析

小万哥

后端 开发 C++11 右值引用 移动语义

MySQL kill会话不起作用?

GreatSQL

MySQL greatsql社区

提升数据中心竞争力、公信力-CQC数据中心运维认证

中国IDC圈

认证 #运维

当 GIS 遇到数字化转型|阿里云产业智能

云布道师

GIS 数字化转型

“中国软件杯”重磅预告!首批百度赛题即将发布

飞桨PaddlePaddle

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