2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

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

关注

评论

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

“自我实现的预言”摩尔定律,如何继续引领创新

E科讯

结合RNN与Transformer双重优点,深度解析大语言模型RWKV

华为云开发者联盟

深度学习 华为云 transformers 华为云开发者联盟 企业号2024年7月PK榜

万字详解!在 Go 语言中操作 ElasticSearch

左诗右码

Elasticsearch SQL

Python 使用 FastAPI 和 PostgreSQL 构建简单 API

我再BUG界嘎嘎乱杀

Python postgresql 开发语言 FastApi

EMQX 与 MQTT: AI 大模型时代的分布式数据中枢

EMQ映云科技

mqtt mqtt broker

使用 Makefile 管理和部署 Go 项目

左诗右码

Go

Renderless 思想正在影响前端开发

OpenTiny社区

开源 组件库 OpenTiny TinyVue

华为大咖说 企业应用AI大模型的“道、法、术” -- 法:落地篇 (上)

华为云PaaS服务小智

人工智能 企业 华为云

利用亚马逊云科技生成式AI工具微调COE流程

亚马逊云科技 (Amazon Web Services)

用flutter实现五种寻路算法的可视化效果,快来看看!

编程的平行世界

flutter 算法

【邀请函】相约CommunityOverCode Asia 2024,共探Flink、Paimon、Celeborn开源新境界!

Apache Flink

大数据 flink Celeborn paimon

一文搞懂到底什么是 AQS

不在线第一只蜗牛

Java JVM

MES系统生产计划的实施流程

万界星空科技

生产管理系统 mes 万界星空科技 生产计划

“英特尔x希沃:40分钟高效课堂“诞生记”

E科讯

市场表现低迷,本周期的山寨币还有投资机会吗?

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

从超越数字到卓越叙事,感受数据可视化的力量

智达方通

企业管理 全面预算管理 财务管理 财务规划

Net5.5G,全球运营商的AI之翼

脑极体

AI

职场<火焰杯>测试开发大赛决赛即将开始!

测吧(北京)科技有限公司

测试

Rust编程语言到底是不是炒作的噱头?

伤感汤姆布利柏

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