写点什么

存储过程与 Entity Framework

  • 2012-08-09
  • 本文字数:1117 字

    阅读完需:约 4 分钟

人们已经写过许多以对象关系映射(ORM)工具及其种种问题为主题的文章。大多数反对意见可归为两类:关注点分离和面向对象设计。对于 Entity Framework(实体框架)而言,我们有些好消息。

关注点分离(Separation of Concerns)

存储过程(Stored Procedure)不仅仅是将多得简直荒唐的业务逻辑塞入数据库的一种方式;它还是避免将多得简直荒唐的存储逻辑塞入应用程序层(application layer)的一种方式。它使得应用程序可被视为理想的数据表现,同时又不会泄露数据库管理员(DBA)的神机妙算。各种各样的暂存表、非规范化的报告表、视图、以及表函数都被隐藏在简单的存储过程调用背后,从而形成了数据库的公共应用编程接口(API)。注意,从微小的性能调整到全面重构的一切都可以完成,且无须重新部署许许多多依赖于该数据库的应用程序。

对于接下来的两个版本,Entity Framework 打算让使用存储过程变得更容易。在即将发布的版本 5 中,我们发现急需表值(Table-valued)函数,以及往模型中批量导入存储过程的能力。

表值函数(Table-valued functions,缩写为TVF)与对象关系映射工具的配合可谓天衣无缝。与普通的存储过程或视图相比,表值函数则要灵活许多,不过离开了动态SQL 语句生成,那么就无法充分利用它们了。而且实际上,SQL 语句生成是将对象关系映射从被美化的数据映射器中分离出来的关键功能。

遗憾的是,只有开发者可以使用这些建模工具。如果你正在用Entity Framework 的Code First 技术,那么你必须一直等到 Entity Framework 6 才能获得某种形式的存储过程支持,而对表值函数的支持就更别提了。

面向对象设计(Object Oriented Design)

面向对象程序设计是个棘手的话题。从本质上讲,对象关系映射工具希望简化为数据传输对象(Data Transfer Object,DTO)风格的一些对象,即拥有默认构造函数和公共属性,从而对象关系映射工具就可以分层执行延迟加载、跟踪变更等等。但是那些偏爱面向对象设计的开发者往往喜欢拥有复杂构造函数、以及有限的公共接口的复杂对象(rich object)。譬如CreatedBy(创建者)或CreatedDate(创建日期)这样的列应该用只读字段和相应的属性来表示,因此就没有机会意外更改它们的值了。

遗憾的是,我们近期内将不会看到这种情况。你可以使用私有设置器(private setter)来完成某些事情,但总体而言,与真正的业务对象相比,实体仍然还是更像数据传输对象。长期来看,自定义Code First 约定(Custom Code First conventions)会有所帮助。这个有前途的功能本打算成为EF 4.1 的组成部分,但是由于该设计的复杂性而被砍掉,而且总体感觉它只是没有准备好。Sergey Barskiy 写了一篇文章来说明本打算做些什么

查看英文原文: Stored Procedures and Entity Framework

2012-08-09 13:494540
用户头像

发布了 55 篇内容, 共 18.9 次阅读, 收获喜欢 1 次。

关注

评论

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

英特尔计划建造浸没式实验室,帮助高功率芯片快速降温

WorkPlus

移动端异构运算技术-GPU OpenCL编程(进阶篇)

百度Geek说

6元自助洗车机一般都什么价位

共享电单车厂家

自助洗车加盟 6元自助洗车机

2022 支付宝五福 |“联机版”打年兽背后的网络技术 RTMS

阿里巴巴终端技术

客户端 网络技术 网络通信

如何撰写数据中台蓝图方案

agileai

数据中台 企业服务总线 主数据平台 数据分析平台 蓝图方案

洗车行业前景好不如开个自助洗车店

共享电单车厂家

自助洗车加盟 开自助洗车店

关键点标注的酷炫,你想象不到

澳鹏Appen

人工智能 数据标注 数据训练 关键点检测 关键点

【高并发】你知道吗?大家都在使用Redisson实现分布式锁了!!

冰河

并发编程 多线程 高并发 异步编程 6月月更

顶级好用的 React 表单设计生成器,可拖拽生成表单

蒋川

低代码 开发工具 React 表单 组件

24小时无人自助洗车要如何加盟?

共享电单车厂家

自助洗车加盟

看完这篇异地多活的改造,我决定和架构师battle一下 / 得物技术

得物技术

架构 容灾 双活 双活容灾 异地多活

OpenHarmony 3.1 Release版本关键特性解析——OpenHarmony新音视频引擎——HiStreamer

OpenHarmony开发者

Open Harmony

为什么你的网站需要搭建在线帮助中心?

小炮

成本节省 50%,10 人团队使用函数计算开发 wolai 在线文档应用

Serverless Devs

Serverless wolai

定档615 | 数字化基础软件自主创新分享周即将来袭,点击获取“通关密钥”!

网易数帆

大数据 云原生 基础软件 数字化转型 自主创新

展示 Postlight 的 WordPress + React Starter Kit

海拥(haiyong.site)

WordPress 6月月更

WASM VS EVM,波卡的选择预示了公链未来

One Block Community

区块链 公链 波卡生态

幸运哈希算法竞猜游戏开发特点分析(成熟方案)

开发微hkkf5566

有了这个云端Mock功能,你的简历起码提升30分!

Liam

前端 Postman 前端教程 API文档 前端工具

Redis 忽然变慢了如何排查并解决?

码哥字节

redis Redis 核心技术与实战 6月月更

哪些人比较适合加盟自助洗车

共享电单车厂家

加盟自助洗车

孩子上网冲浪更安全,这份儿童节礼物值得拥有

最新动态

2022年4月线上终端药品增长迅猛,市场政策合规进程加快

易观分析

医药类

各国儿童节时间是不一样的

清林情报分析师

数据可视化 知识图谱 儿童节

“东数西算”与“双碳”双驱力叠加,新华三争当“全能型选手”

WorkPlus

2022云原生网络趋势 | K8s托管整个基础设施、多云、边缘计算、安全等场景,将云原生网络带向新战场

York

云原生 网络 Kube-OVN cni 6月月更

C#入门系列(一) -- 初识C#语言

陈言必行

C# 6月月更

CPU利用率从10%提升至60%:中型企业云原生成本优化实战指南

星汉未来

运维 云原生 IT成本 星汉未来 FinOps

博睿数据拨测入场加速广电深度融合

博睿数据

智能运维 博睿数据 智慧广电

自助洗车机还能加盟你不知道吧?

共享电单车厂家

自助洗车机 自助洗车加盟

为什么PO的角色在Scrum框架中不可替代

ShineScrum

Scrum 产品经理 PO 产品负责人

存储过程与Entity Framework_.NET_Jonathan Allen_InfoQ精选文章