50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

关注

评论

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

在线文本字符串批量替换工具

入门小站

工具

InfoQ 极客传媒 15 周年庆征文|Socket请求和Http请求特点、区别及适用场景

No Silver Bullet

HTTP请求 6月月更 InfoQ极客传媒15周年庆 Socket请求

Java异常处理机制

未见花闻

6月月更

服务器运维环境安全体系(下篇)

融云 RongCloud

linux之Ansible快速入门

入门小站

Linux

SAAS服务能有哪些优势

Geek_99967b

小程序 SaaS SaaS系统架构

悬赏任务源码开发设计构建时,要留意哪些事项

开源直播系统源码

源码 软件开发 直播系统 悬赏任务源码

Linux编程_网页视频监控项目

DS小龙哥

6月月更

hashmap的底层机制

卢卡多多

集合 6月月更

运算符 (第二天)

Jason199

运算符 js 6月月更

知识图谱、图数据平台、图技术如何助力零售业飞速发展

GPU算力

图计算 图数据分析 图数据一体机

Google搜索为什么不能无限分页?

蝉沐风

elasticsearch 深度分页

互联网公司研发效能团队为啥必须独立?何时独立?

laofo

互联网 DevOps cicd 研发效能 工程效率

在线JSON转CSV工具

入门小站

工具

企业无忧 | Apipost私有化部署活动即将火热开启

Xd

后端 apipost 接口测试工具

Vue中created和mounted的区别

devpoint

Vue Vue3 InfoQ极客传媒15周年庆

浅谈企业自媒体如何才能脱颖而出

石头IT视角

Python时区转换的两种方式

红毛丹

Python 6月月更

漫谈测试覆盖率

老张

软件测试 质量保障 质量度量

python小知识-python作用域和闭包

AIWeker

Python python小知识

『Three.js』起飞!

德育处主任

JavaScript canvas 前端可视化 three.js 6月月更

如何在使用 Flutter时切换应用时隐藏应用预览

坚果

6月月更

马志强:语音识别技术研究进展和应用落地分享丨RTC Dev Meetup

声网

音视频 语音识别

流程测试支持批量参数导入,测试效率直接拉满!

Xd

数据库 后端 接口测试 测试工具

Vue-4-模板语法-1

Python研究所

前端 6月月更

设计千万级学生管理系统的考试试卷存储方案

Fan

架构师实战营

MySql事务

工程师日月

6月月更

只需八步将小程序一键打包生成App

Geek_99967b

小程序 小程序转app

Django API 开发:视图设置和路由

宇宙之一粟

django 6月月更

SpringBoot应用使用自定义的ApplicationContext实现类

程序员欣宸

Java spring springboot Spring Framework 6月月更

C#入门系列(十) -- 一维数组

陈言必行

C# 6月月更

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