【发布时间】:2011-10-11 01:55:10
【问题描述】:
我在几个项目中使用了实体框架。在每个项目中,我都使用映射到实体的存储过程,因为存储过程众所周知的好处——安全性、可维护性等。但是,99% 的存储过程是基本的 CRUD 存储过程。这似乎否定了 Entity Framework 的主要省时特性之一——SQL 生成。
我已经阅读了一些关于存储过程与实体框架中生成的 SQL 的争论。虽然使用 CRUD SP 的安全性更好,而且 EF 生成的 SQL 往往比必要的复杂,但使用 SP 真的在性能或可维护性方面有什么好处吗?
这是我的信念:
- 大多数时候,修改 SP 需要更新数据模型 反正。因此,就可维护性而言,它并不买太多。
- 对于 Web 应用程序,与数据库的连接使用特定于应用程序的单个用户 ID。因此,用户甚至没有直接的数据库访问权限。这会降低安全性优势。
- 对于小型应用程序,使用会稍微降低性能 生成的 SQL 可能不是什么大问题。对于高 体积,性能关键的应用程序,EF 甚至是一个明智的选择 选择?另外,是否生成了插入/更新/删除语句 EF真的那么差吗?
- 将每个属性发送到存储过程都有其自身的性能损失,而 EF 生成的代码只发送实际更改的属性。在对大型表进行更新时,增加的网络流量和更新所有属性的开销可能会抵消存储过程的性能优势。
话虽如此,我的具体问题是:
我上面列出的信念是否正确?现在 ORM 越来越受欢迎,总是使用 SP 的想法是“老派”吗?根据您的经验,哪个是使用 EF 的更好方法 - 为所有插入/更新/删除映射 SP,还是使用 EF 生成的 SQL 进行 CRUD 操作,只使用 SP 处理更复杂的事情?
【问题讨论】:
-
modifying an SP requires updating the data model anywaySP 最终会显着增加应用程序的维护成本,这不仅仅是因为您必须在至少 5 个位置进行每次更改(插入、更新和删除各 1 个 SP,在至少一个用于选择,然后在您的实体模型中),而且因为对于任何不是简单 CRUD 操作的事情,您都将应用程序逻辑隐藏在应用程序之外,并且开发人员必须在不同的 IDE 之间来回切换。
标签: entity-framework entity-framework-4