写点什么

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

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

关注

评论

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

TCP长连接实践与挑战

字节跳动终端技术

字节跳动 TCP 后端 HTTP 连接池

模板

Anthony

模块六作业

novoer

「架构实战营」

LabVIEW仪表盘识别(实战篇—6)

不脱发的程序猿

机器视觉 图像处理 LabVIEW 仪表盘识别

架构训练营模块一作业

苍狼

如何知道自己是否适合做产品经理?

石云升

产品经理 1月月更

微信的业务架构&学生管理系统架构设计

随欣所遇

架构实战营

☕【Java深层系列】「并发编程系列」深入分析和研究MappedByteBuffer的实现原理和开发指南

码界西柚

Java 文件I/O MappedByteBuffer FileChannel 1月日更

微信架构简析和学生系统初步方案

Bear

「架构实战营」

云厂商第一家,腾讯安全获国家级信息安全服务资质“双认证”!

腾讯安全云鼎实验室

云安全 安全服务

架构实战营模块一作业

刘璐

实现一个任务调度系统,看这篇文章就够了

勇哥java实战分享

Elastic-job XXL-JOB 任务调度 自主研发

学生管理系统架构设计方案

Geek_36cc7c

微信业务架构图 & 学生管理系统设计

tom

Apache APISIX 2.12.0 版本发布,新功能更适配新一年!

API7.ai 技术团队

开源 后端

天津银行周传凯:从 0 到 1,我的分布式数据库落地经验谈

OceanBase 数据库

分布式 OceanBase 开源 OceanBase 社区版 客户实践

架构设计小试牛刀

Fingal

架构实战营

领域划分的规则是什么

神帅

DDD 领域划分规则

企业管理中用户数据同步机制解决思路

全象云低代码

低代码 数据同步 用户数据 后端技术

数据治理平台化的通用框架设计

小鲸数据

什么时候该减少质量投入?

QualityFocus

质量管理 软件测试 测试思维

为什么 Cpython 是 C 写的,而不是 Python

宇宙之一粟

Python 1月月更

架构训练营作业1

Richard

架构实战营

三峡集团研究院:基于物联网的大规模储能系统能量管理和智能运维平台数据接入方案

EMQ映云科技

物联网 mqtt 碳中和 边云协同 新能源

LabVIEW实现PCB电路板元器件匹配定位(实战篇—7)

不脱发的程序猿

计算机视觉 图像处理 LabVIEW PCB电路板元器件匹配定位

第一次作业

Mr小公熊

DDD独立类模式你用到了吗

神帅

DDD 独立类模式

架构实战营-模块一作业

炎彬

「架构实战营」

架构图 - 微信 & 学生管理系统

Ntropy

架构实战营

百度AICA再添57位“首席AI架构师”,人工智能与产业场景结合愈发深入

百度大脑

微信业务架构图

Geek_36cc7c

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