发布在即!企业 AIGC 应用程度测评,3 步定制专属评估报告。抢首批测评权益>>> 了解详情
写点什么

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

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

关注

评论

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

2579页阿里P8Android学习笔记在互联网上火了,完整版开放下载

android 程序员 移动开发

30岁程序员:深圳,我终究要来了这座年轻的城市,移动开发者社区

android 程序员 移动开发

2020非科班生的Android秋招,金九银十求职经历 (快手,android游戏开发实践指南

android 程序员 移动开发

2021了,为什么说音视频技术是技术风口?Android音视频开发这么吃香

android 程序员 移动开发

2021程序员熬夜加班,28岁大病一场后被裁看清生活真谛,kotlin协程的实现原理

android 程序员 移动开发

37岁老码农现身说法:那些年,我走过的弯路,手把手教你5G时代Webview的正确使用姿势

android 程序员 移动开发

2020阿里P8单写给Android程序员的建议:这样的offer不能要啊!注意避坑

android 程序员 移动开发

2021年3月份Android 面经总结!(OPPO和腾讯等大厂,android底层开发百度网盘

android 程序员 移动开发

27道 Handler 经典面试题,你能答出多少?,关于Android程序员最近的状况

android 程序员 移动开发

3-5年以上的Android原生开发如何深入进阶?高级工程师必须要掌握哪些?(1)

android 程序员 移动开发

30岁转行程序员,阿里10年老码农表示:可以转,《Android面试题及解析》分享给大家

android 程序员 移动开发

35岁以上的Android开发,都去了哪儿?,安卓开发

android 程序员 移动开发

2021年之Android面经分享(已获头条、顺丰,androidapp开发工具

android 程序员 移动开发

2021想进阿里?送你一份 40000 字《阿里进阶指南,android音视频编解码

android 程序员 移动开发

2021最新整理大厂Android面试高频知识点,阿里高级算法专家公开10份资料

android 程序员 移动开发

30多个超赞的Android开发者工具,android开发框架开源登录界面

android 程序员 移动开发

35岁以上员工就要被辞退?你知道互联网行业的“中年,android面试40题

android 程序员 移动开发

35岁后程序员自救指南,我拿到了梦寐以求的字节跳动和腾讯双offer

android 程序员 移动开发

2021Android性能优化总结最新、最全面、最完整的资料,大厂内部资料

android 程序员 移动开发

2021字节跳动,金三银四内幕Android中高级面试题合集-令人细思极恐!

android 程序员 移动开发

2020这一年的Android面经汇总(百度、腾讯、滴滴,职场中的中年危机

android 程序员 移动开发

2021年Android开发的前景如何?,安卓面试题及答案

android 程序员 移动开发

3-5年以上的Android原生开发如何深入进阶?高级工程师必须要掌握哪些?

android 程序员 移动开发

30w字+的Android技术类校招面试题汇总(附答案,Android框架体系架构的知识

android 程序员 移动开发

35岁后程序员自救指南(1),写给1-3年安卓程序员的几点建议

android 程序员 移动开发

模块二作业:微信朋友圈复杂度分析

赵先生

架构实战营

2021 年 9 月美团 Android 面试总结,flutter屏幕旋转监听

android 程序员 移动开发

2021年最新Android开发岗面试笔试总结,android开发视频播放器

android 程序员 移动开发

2021最新Android必备面试题,上海大厂Android面试经历

android 程序员 移动开发

35岁教师下岗,自学编程能给我的生活带来多大变化,android指纹识别开发

android 程序员 移动开发

2020适合中高级工程师的面试题——java基础,移动网页开发框架

android 程序员 移动开发

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