写点什么

存储过程与 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:494891
用户头像

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

关注

评论

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

LeetCode题解:938. 二叉搜索树的范围和,递归,JavaScript,详细注释

Lee Chen

JavaScript 算法 LeetCode

Serverless 架构下的 AI 应用开发

阿里巴巴云原生

阿里云 Serverless 云原生

如何平衡客户和用户的诉求冲突?

QualityFocus

产品经理 需求 产品需求

从 NASL 说开:低代码编程语言能饭否

石臻臻的杂货铺

11月月更

【PCB干货】是开窗还是盖油?想搞懂过孔工艺,看这篇就够了!

华秋PCB

PCB PCB设计 过孔 PCB工艺

“元宇宙家园”国脉大厦展馆上线 天翼云实时云渲染筑基未来数字世界

天翼云开发者社区

二面美团,有惊无险已拿offer,不得不说“太难了”

钟奕礼

Java 程序员 java编程 Java 面试题

涨薪跳槽利器!清华大佬总结的Java核心突击讲,一应俱全

钟奕礼

Java java程序员 java面试 java编程

双机热备与集群的区别分析-行云管家

行云管家

高可用 双机热备 双机

Jenkins + Docker 一键自动化部署 Spring Boot 项目

小小怪下士

Java Docker jenkins springboot

南京等保测评公司有哪些?一共有几家?

行云管家

等保测评 等保备案 等保整改 南京等保测评

数字先锋| 随时随地云端阅片,“云胶片”时代来啦!

天翼云开发者社区

企业需要进行信息化改革,有哪些好用的信息化管理系统推荐?

优秀

低代码 信息化 信息化管理

2022年中国母婴新消费市场专题分析

易观分析

母婴 消费市场

PID和TID的区别

源字节1号

APP开发 低代码开发 小程序开发 网站开发

中国互联网大会天翼云展区大揭秘!

天翼云开发者社区

Linux中基于Docker搭建harbor私有镜像仓库(超级详细)

A-刘晨阳

Docker Linux 运维 Harbor 11月月更

把Mybatis Generator生成的代码加上想要的注释

京东科技开发者

maven IDEA 代码注释 MyBatis标签 Generator

java面试之经典算法篇

钟奕礼

Java java面试 java编程 程序员 java

Docker搭建harbor私有镜像仓库(命令行模式)

A-刘晨阳

Docker Linux 运维 11月月更

瓴羊Quick BI在线电子表格,数据分析人员高效工作“神器”

巷子

背完这3套Java面试题,年后offer接不停

钟奕礼

Java java面试 java编程 程序员java

栈简介、手撸顺序栈、手撸链栈和栈的应用

C++后台开发

数据结构 后端开发 linux开发 C++开发

2023上海国际智慧灯杆及智慧路灯展览会

AIOTE智博会

上海智博会 智慧灯杆展会 智慧路灯展会

大咖说·先临三维|技术入云塑造3D视觉行业新模式

科技pai

阿里云 科技 3D视觉

行业首个测试开发技术大赛开始报名啦~ 10万现金奖励等你来挑战

霍格沃兹测试开发学社

智能时代如何打通商业市场?华为的内外兼修

这不科技

物流通知:您的快递即刻送达!

天翼云开发者社区

5 分钟带你在本地搭建一套云原生实验环境

谢烟客

Kubernetes 云原生 Service Mesh istio kind

【C语言】return 关键字

謓泽

11月月更

Linux中安装/部署docker-compose

A-刘晨阳

Docker Linux 运维 Docker-compose 11月月更

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