写点什么

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

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

关注

评论

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

测试人生 | 手工转测试开发成功秘籍揭秘:从裁员到入职18k+,收获4个Offer,道阻且长不怯步

测吧(北京)科技有限公司

测试

阿里P8面试官重磅首发2025年Java岗春招面试总结!

程序员高级码农

Java 编程 程序员 java面试 Java面试题

启用Linux防火墙日志记录和分析功能

运维有小邓

IT自动化运维 linux日志管理 防火墙日志管理

【YashanDB知识库】启动数据库时报错:YAS-02059 control file version 0.2.64 is incompatible with YashanDB version 0.2.65

YashanDB

数据库 yashandb

开源for Huawei,Beam适配GaussDB实践案例分享

华为云开发者联盟

Beam GaussDB Java’ #数据库 #开源

英特尔IEDM 2024大晒封装、晶体管、互连等领域技术突破

E科讯

矩阵起源荣膺"2024AI最佳实践案例"------多模态AI数据智能平台,让您的数据成就您的AI

MatrixOrigin

数据库 AI InfoQ 技术创新 MatrixOrigin

Hume 语音模型 OCTAVE:实现情感语音合成、声音克隆和多角色对话生成;通义开源多模态说话人识别项目 3D-Speaker

RTE开发者社区

比特币市场震荡:回调背后的机遇与挑战

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

开发一个DApp项目:DeFi、DApp开发与公链DApp开发

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

图像识别大揭秘:从安防到自动驾驶,视觉模型如何重塑世界

测吧(北京)科技有限公司

测试

什么是原生IP?

Ogcloud

IP 海外原生IP 海外IP 海外IP代理 海外静态IP

一文了解多云原生的现代化实时数仓 SelectDB Cloud

SelectDB

云计算 数据仓库 云原生 云数据库 SelectDB

技术干货丨OptiStruct 非线性之前车门下沉分析

Altair RapidMiner

汽车 制造 仿真 sheji altair

京东科技基于 Apache SeaTunnel 探索复杂场景适配

白鲸开源

Clickhouse 数据同步 数据集成 Apache SeaTunnel 京东科技

JVM简介—垃圾回收器和内存分配策略

不在线第一只蜗牛

Python JVM

和鲸科技荣获 2024 全国人工智能应用场景创新挑战赛二等奖,赋能“学科+AI”人才培养与实验室建设

ModelWhale

人工智能 大数据 AI

金融领域研发效能的特性有哪些?拓展边界是什么?

思码逸研发效能

研发效能 金融科技 研发效能度量 研发效能管理 思码逸

鸿蒙元服务审核上的一些思考

flfljh

什么是企业组网?企业组网的重要性解析

Ogcloud

组网 企业组网 企业网络 公司网络

告别传统FAQ,天润融通如何通过AI优化员工服务体验?

天润融通

今日分享 | 新增任务交互秘籍

inBuilder低代码平台

设计 UX 交互设计

天润融通解决方案:大模型让SOP执行监管更智能

天润融通

【YashanDB知识库】如何解决共享集群部署遇到报错:YAS-05721 invalid input parameter, reason: node name invalid.

YashanDB

数据库

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