写点什么

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

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

关注

评论

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

薪人薪事&用友BIP无缝对接,重塑企业管理新生态!

聚道云软件连接器

案例分享

PhpStorm 2023 for Mac(PHP集成开发) v2023.3.2激活版

Mac相关知识分享

macOS 12 Monterey (苹果mac12系统)v12.7.2正式版

理理

Desktop Goose for Mac(抖音桌面宠物鹅)v0.22激活版

Rose

SecureCRT mac使用详细教程 (SecureCRT for mac注册密钥)

理理

火山引擎联合RollingAI、InfoQ共同发布《生成式 AI 商业落地白皮书》

新消费日报

windows11系统,Win11,windows11下载,ARM版Win11镜像

理理

Parallels Desktop 19 for Mac(PD19虚拟机) v19.1.0一键激活版

理理

Notcoin 加速器三角:它如何支持 TON

大瞿科技

硅纪元视角 | GPT-4o mini限时免费微调,每天200万免费token

硅纪元

openai GPT-4o mini Minimax

IoTDB 集群高效管理小帮手:开机自启

Apache IoTDB

GreatSQL 的刷新锁

GreatSQL

greatsql

PhpStorm 2023 for Mac(PHP集成开发) v2023.3.2激活版

Mac相关知识分享

Mimestream for Mac(电子邮件客户端) v1.3.7激活版

Mac相关知识分享

苹果mac ps 2020中文激活版下载安装 附phtoshop2020破解补丁

理理

人工智能丨利用人工智能自动找bug

测试人

软件测试

企业数字化离不开ERP和MES

万界星空科技

数字化转型 ERP 生产管理系统 mes 万界星空科技

MobPush Android SDK厂商通道申请指南

MobTech袤博科技

Java 开发者 产品动态

想在M1上运行安装iOS软件怎么办呢?

理理

匠人携手金蝶&诺诺,打造企业数字化管理新纪元!

聚道云软件连接器

案例分享

Microsoft Office LTSC for Mac/win 2021永久使用版

理理

Waves 15 Ultimate for Mac(后期混音效果全套插件) v2024激活版

Mac相关知识分享

插件套装

9000字干货:从消息流平台Serverless之路,看Serverless标准演进

华为云PaaS服务小智

Serverless 华为云

VMware Fusion Pro 12破解版 v12.2.5 mac vm虚拟机密钥分享

理理

Cornerstone for Mac(最好用的SVN管理工具)v4.2永久激活版

理理

Microsoft 365 for Mac(Office 365)v16.80正式激活版

Rose

太有AI了!粉丝手搓上百个智能体为中国健儿打CALL

科技热闻

Mac远程连接软件 microsoft remote desktop苹果汉化版

理理

pycharm pro for mac(Python编辑开发) v2023.3.2中文激活版

Mac相关知识分享

开发

TechTool Pro for mac(硬件监测和系统维护工具) v20.0.1中文激活版

Mac相关知识分享

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