AICon 上海站|90%日程已就绪,解锁Al未来! 了解详情
写点什么

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

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

关注

评论

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

文档内容结构化在百度文库的技术探索

百度Geek说

百度 大前端

保安小王分享:四面字节跳动,终拿Offer,只有努力,方能成功

一夜爆火!完美贴合开发实际!阿里SpringBoot宝典助你面试超神

Java 编程 程序员 架构师 计算机

iOS底层面试题(中篇)

程序员 面试 iOS底层

淘宝商城的系统架构,是如何一步步突破“亿”级并发的?

Java架构师迁哥

底层即真理!Netty+Redis+ZooKeeper解读高并发系统架构!

Java架构追梦

Java redis zookeeper 架构 架构编程

双因子认证是什么意思?有什么作用?

行云管家

信息安全 双因子认证

【云洲智造】直播间下午4:30准时开播!

工业互联网

银行4.0的AI世界——开启算法力的时代

索信达控股

Spring Boot指标监控与健康检查

偏执

面试 spring Boot Starter

spring-boot-starter自动配置的理解

偏执

面试 spring Boot Starter

从零开始学习3D可视化之项目部署

ThingJS数字孪生引擎

大前端 数据 可视化 数字孪生

不收藏你就后悔吧!费了三天才从GitHub上扒下的阿里Java优化笔记

保洁阿姨分享:腾讯架构师JDK源码笔记,13万字,带你飙向实战

Qunar容器平台网络之道:Calico

Qunar技术沙龙

容器 TCP/IP calico BGP #Kubernetes#

2021秋招我这样准备,提前批就已经拿到了9个大厂offer

北游学Java

Java 面试 秋招

Abp太重了?轻量化Abp框架

Patronum

学习 程序员 架构 框架 Abp

Linux-通过 liveCD 进入救模式-重装 grub 修复损坏的系统

学神来啦

Linux 运维 linux运维 linux学习

聊一聊在阿里做了 8 年研发后,我对打造大型工程研发团队的再思考

尔达Erda

开源 云原生 研发管理 PaaS 研发

架构训练营模块三作业

晨晨

架构训练营

Redis 关键点思维导图

Mason

智能获客黑科技系统开发搭建

springboot自动装配源码解析

偏执

面试 后端 spring Boot Starter

基于 Golang 构建高可扩展的云原生 PaaS(附 PPT 下载)

尔达Erda

开源 云原生 数字化转型 PaaS 数字化

客户端版本热更新

admin

Electron 热替换 客户端 小版本升级 热更新

Qunar SwiftUI 的实践、评测与思考

Qunar技术沙龙

objective-c swift UI SwiftUI UIKit

二本的他是如何在12天面试突击中,拿到阿里P7的offer

Java架构师迁哥

现在双非本科的学历还有机会拿到大厂 offer 吗?

java小李

面试 spring Boot Starter

什么是JVM?深入解析JVM原理!

愚者

Java JVM

终于有人把大数据架构讲明白了

百度开发者中心

大数据 最佳实践 方法论 其他

模块三作业

Geek_35a345

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