写点什么

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

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

关注

评论

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

Apipost协议全栈支持+国密算法,调试效率飙出星际!

数据追梦人

埋点系统客户案例-金融媒体为何选择ClkLog替换10万年费的SaaS平台?

ClkLog

开源 埋点 行为分析 画像

是时候正视开源合规的重要性了!我们给你准备了一套体系课程

字节跳动开源

开源 安全 课程 字节 开源合规

愚人节特辑:AI比你想象得更蠢

脑极体

AI

AI 重构老旧系统:创业新曙光

TechLead Studio

AI创业机会

飞算JavaAI生成SpringBoot全模块代码实战

飞算JavaAI开发助手

MyBatis动态SQL太繁琐?飞算JavaAI自动生成高效数据库操作代码

飞算JavaAI开发助手

TiDB 亮相宜昌“医院‘云数智’技术实践研讨及成果展示交流会”,探讨国产化 + AI 背景下的数据库新趋势

PingCAP

人工智能 数据库 云计算

ClkLog埋点分析系统-Flutter埋点上报攻略

ClkLog

开源 埋点 用户行为分析 画像

Pioneer DJ rekordbox for Mac(专业的DJ音乐管理软件)

Rose

昇腾CANN算子共建仓CANN-Ops正式上线Gitee,首批算子已合入

华为云开发者联盟

人工智能 算子 昇腾CANN DeepSeek

SSL证书不可信的原因有哪些?(国科云)

防火墙后吃泡面

网络安全等级保护分为几级?

黑龙江陆陆信息测评部

《Operating System Concepts》阅读笔记:p545-p551

codists

操作系统

火山引擎智能数据洞察 ChatBI 适配 DeepSeek-R1 及 DeepSeek-V3

Lily

Mac电池最大充电限制工具 AlDente Pro

Rose

Slidepad for Mac(高效率办公软件)v1.5.6 激活版

Rose

飞算JavaAI助力毕业生高效完成毕业设计

飞算JavaAI开发助手

Java反射性能优化太难?飞算JavaAI自动生成高性能动态代理代码

飞算JavaAI开发助手

Superchain Interoperability:从碎片化跨链流动性到统一原生流动性层的未来

NFT Research

blockchain web3、

Pr2024下载,Premiere Pro 2024中文破解版

Rose

UnlockGo(安卓版)for Mac 手机解锁工具 专为Android设备设计

Rose

API调用类型全面指南:理解基础知识

数据追梦人

Photomator for mac v3.4.8中文版 照片编辑器

Rose

mestrenova 14(核磁数据处理软件)-Mac/win

Rose

爆肝整理!AI生成Java代码的10个高级技巧

飞算JavaAI开发助手

前沿多模态模型开发与应用实战3:DeepSeek-VL2多模态理解大模型算法解析与功能抢先体验

百度Geek说

大模型、

MacBook 跑通 :火山引擎 视频实时理解​

Lily

推理性能提升13倍,延时缩短超4倍丨实测焱融YRCloudFile KVCache

焱融科技

AI推理 #分布式文件存储 KVCache

课程质量评估系统(源码+文档+讲解+演示)

深圳亥时科技

活动中台系统慢 SQL 治理实践

vivo互联网技术

Java 数据库 后端

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