速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

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

关注

评论

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

你好

小东

第一次

华为云大数据BI解决方案,如何帮助企业精准营销

路过的憨憨

华为

如何规范App广告的隐私获取,让用户拥有更多知情权?

HarmonyOS SDK

广告sdk

分布式事务Seata框架的AT模式

C++后台开发

分布式 微服务 后端开发 C++开发 Seata框架

前端培训学习完之后可以从事的工作方向

小谷哥

web前端培训学习能找到工作吗

小谷哥

大数据开发培训学习方法

小谷哥

华为云对象存储服务OBS教你一招轻松解决存储难题

路过的憨憨

华为

SAP | 聊一聊必不可少的Debug

暮春零贰

debug SAP 10月月更

HTML基本知识学习笔记

虾仁疙瘩汤

html 前端 10月月更

华为云CDN联手OBS桶,帮助企业更好降本增效!

路过的憨憨

华为

分布式事务-事务补偿(TCC)

zarmnosaj

10月月更

SAP | 如何使用内部表

暮春零贰

SAP 10月月更 内部表

低代码平台 - 危险的赌注

世开 Coding

软件开发 低代码 开发框架

一文读懂云渲染“串流”全链路时延及优化策略

阿里云CloudImagine

阿里云 云渲染 云游戏 串流

华为云对象存储OBS,助力企业高效解决存储问题

路过的憨憨

华为

【文本检测与识别白皮书】第三章 - 第三节:算法模型 2

合合技术团队

人工智能 深度学习 大数据 文字识别

Wallys /IPQ4019 IPQ4029 ,HTTPS / all the modules of Quectel/Indoor Aluminium alloy material

wallys-wifi6

IPQ4019 ipq4029

rdd pair reduce

小东

CSS学习笔记1

虾仁疙瘩汤

CSS html 10月月更

倒计时第2天!2022 XDR网络安全运营新理念峰会即将开幕

未来智安XDR SEC

网络安全

生产数据实时分析,产品质量高效管控|打造面向工业4.0的智能工厂02

EMQ映云科技

云原生 物联网 IoT 边云协同 10月月更

英特尔“四维发力”系统级代工:晶圆制造、封装、芯粒、软件

科技之家

持续引领产业发展,华为云桌面连续6年位居国内市占率第一

路过的憨憨

华为

LeaRun低代码开发平台 助推物联网应用快速落地

力软低代码开发平台

软件测试面试真题 | 显式等待与隐式等待的区别?与强制等待的方式分别是什么,有什么区别?

测试人

软件测试 面试题 测试开发 测试工程师

HTML学习笔记

虾仁疙瘩汤

html 前端 10月月更

BizWorks应⽤平台基于KubeVela的实践

阿里云E2企业云服务

阿里云 中台 插件 企业架构和云服务 api 网关

命令执行相关的web题

w010w

命令行 CTF 每日一题 10月月更 web基础

1024程序员节 | 畅聊名“猿”之路,重磅视频预告

小谷哥

新手剪辑师秒变大神 高级感视频剪辑的几种常用技巧

懒得勤快

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