写点什么

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

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

关注

评论

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

好书推荐|《产业数字化转型精要:方法与实践》

李洋

职业 数字化转型 数字经济 书籍 CIO的秘密武器

DevOps 实践多年,最痛的居然是?

飞算JavaAI开发助手

软件研发效能度量的成功要素

思码逸研发效能

研发管理 研发效能 软件研发

嵌入式操作系统多任务调度原理分析与RUST参考实现

Geek_0185b7

JAVA编程规范之注释规约

源字节1号

后端开发

性能领域:你知道的越多,不知道的也就越多

博文视点Broadview

大数据培训机构怎么选?

小谷哥

编程技巧│超实用 nginx 中常见的配置合集

nginx 运维 经验分享 7月月更

怎么选择好的web前端开发培训课程

小谷哥

小程序技术解决桌面应用敏捷迭代的一种思路

Speedoooo

小程序 移动开发 小程序容器 桌面应用

浅析 Apache Kafka 分区重分配的实现原理

移动云大数据

kafka 开源

SAP 实施项目中涉及到编程方式操作 Excel 的几种场景介绍

汪子熙

Excel automation SAP abap 7月月更

如何使用 SAP Intelligent Robotic Process Automation 自动操作 Excel

汪子熙

机器学习 RPA 机器人流程自动化 SAP 7月月更

庖丁解牛,复盘 HiveServer2 连接频繁卡顿问题

移动云大数据

大数据 hive

MySync——企点通用MySQL数据同步解决方案

腾讯企点技术团队

MySQL 数据库 日志 Binlog 同步

云原生、Intel Arch及云原生机密计算 3 大 SIG 在线分享!今天见 | 第 32-34 期

OpenAnolis小助手

开源 云原生 虚拟化 龙蜥大讲堂 SIG双周会

启新聚势 云谱新篇|海泰方圆与四川联通达成生态战略合作

电子信息发烧客

聚焦数据|海泰方圆直击证券行业数据安全治理建设思路

电子信息发烧客

巧用RoaringBitMap处理海量数据内存diff问题

得物技术

Java HBase BitMap

云原生(七) | Docker篇之深入Docker Compose

Lansonli

云原生 7月月更

【深度】新派LaaS协议Elephant:重振DeFi赛道发展的关键

小哈区块

百问百答第47期:极客有约——中信建投当前的监控体系建设情况

博睿数据

智能运维 博睿数据 中信建投 监控体系 系统监测

大数据入门学习指南

Lansonli

大数据 7月月更 大数据基础 大数据基础知识 大数据核心

国际顶会OSDI首度收录淘宝系统论文,端云协同智能获大会主旨演讲推荐

阿里巴巴大淘宝技术

人工智能 #开源

火爆各平台的拼团功能,宝子们在多商户系统中玩过吗?

CRMEB

学习web前端开发有哪些好的方法

小谷哥

Java培训如何选择靠谱

小谷哥

JS class 并不只是简单的语法糖!

掘金安东尼

JavaScript 前端 设计模式 7月月更

Linux下玩转nginx系列(七)---nginx如何实现限流功能

anyRTC开发者

nginx Linux 音视频 服务器 限流

2022可信区块链生态大会落幕——旺链科技参与《区块链供应链金融系统评测方法》制定

旺链科技

区块链 产业区块链 供应链金融

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