写点什么

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

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

关注

评论

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

科学的演变:从笛卡尔到生成式人工智能

Baihai IDP

人工智能 AIGC 企业号 4 月 PK 榜

低至200元/月,火山引擎DataLeap帮你搭建企业级数据中台

字节跳动数据平台

数据中台 数据集成 促销 数字化建设 企业号 4 月 PK 榜

用友开发者中心应用构建实践指引(二):如何实现入职申请单功能?

YonBuilder低代码开发平台

浅析云原生时代的服务架构演进

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 4 月 PK 榜

从零学习SDK(4)使用SDK创建一个简单的应用程序

MobTech袤博科技

如何成为一名数据分析师(一)——面试准备

Data 探险实验室

数据分析 数据 数据可视化 数据分析师

Apache IoTDB v1.1.0 发布|增加多种分段方式与实用函数,引入 pipeline 执行引擎进一步提升查询速度

Apache IoTDB

期盼已久的“库权限”来了

NineData

数据库 安全 数据 开发 权限管理

软件测试丨河南工业大学“火焰杯”软件测试开发选拔赛颁奖仪式

测试人

软件测试丨ChatGPT的火爆对测试人员来说,是机遇还是挑战?

测试人

软件测试 ChatGPT

聊聊ChatGPT

炜娓道来程序人生

AI ChatGPT

OpenTiny 跨端、跨框架组件库升级TypeScript,10万行代码重获新生

华为云开发者联盟

Vue 前端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

【直播回顾】数字化转型成为银行业发展的关键(上)

易观分析

金融 银行 经济

你知道什么是“XY Problem”吗?-【避坑指南】

炜娓道来程序人生

架构 职场 沟通 工作哲学 思维

【四大分主题,九次干货分享】去哪儿网“云原生”系列分享即将开讲!!

Qunar技术沙龙

云原生 去哪儿网

从 OSPO 角度思考开源治理问题——蚂蚁集团开源办公室负责人边思康

开源雨林

你的 Kubernetes 安全吗?最新benchmark的重要趋势解读

HummerCloud

Kubernetes k8s

阿里P8架构师3年心血终成的453页神级Java系统分析与架构设计文档

Java你猿哥

Java ssm 架构师 面经 Java系统性能

OpenHarmony标准系统开机时长优化

OpenHarmony开发者

OpenHarmony

穿云鉴智 - HashiCorp 创始人对于 AI 大模型的思考

Bytebase

人工智能 DevOps

扯下@EventListener这个注解的神秘面纱。

why技术

Java 源码

MySQL中,SQL 查询总是先执行SELECT语句吗?

Java你猿哥

Java MySQL sql ssm

绝了!阿里大佬的"Redis深度核心笔记",从基础到源码,全是精华

Java你猿哥

Java redis 面试 面经 春招

GreatSQL社区月报 | 2023.03

GreatSQL

greatsql greatsql社区

4月飞桨国赛火热报名中!产业级赛题和免费硬件,等你来拿

飞桨PaddlePaddle

飞桨

极光笔记 | 如何在Shopify中使用EngageLab (下)

极光JIGUANG

市场营销 用户运营

使用 App Store Connect API v2.3 管理 App Store 新定价机制

37手游iOS技术运营团队

ios iap In App Purchase App Store Connect API app store

Redis管道

京茶吉鹿

nosql redis pipeline

火山引擎云原生数据仓库ByteHouse技术白皮书V1.0(上)

字节跳动数据平台

大数据 数据仓库 云原生 实时数仓 企业号 4 月 PK 榜

Docker教程:如何将Helix QAC创建为一个容器并运行?

龙智—DevSecOps解决方案

Docker 容器 Helix QAC 静态代码扫描

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