我在一些项目中使用了实体框架。在每个项目中,我都使用映射到实体的存储过程,这是因为存储过程的众所周知的好处 - 安全性,可维护性等。但是,99%的存储过程是基本的CRUD存储过程。这看起来像是否定了实体框架 - SQL生成的主要节省时间的功能之一。实体框架存储过程与生成的SQL
我读过一些有关存储过程与实体框架中生成的SQL的争论。虽然使用CRUD SPs对于安全性更好,而EF生成的SQL通常比必要的更复杂,但它是否真正购买了使用SP的性能或可维护性方面的任何内容?
这里是什么,我相信:
- 大部分的时间,修改SP需要更新数据模型 反正。所以,在可维护性方面并没有太多的购买。
- 对于Web应用程序,与数据库的连接使用特定于应用程序的单个用户ID。因此,用户甚至没有直接的数据库访问权限。这降低了安全效益。
- 对于一个小型应用程序,使用生成的SQL稍微降低的性能可能不是什么大问题。对于音量高,性能关键的应用程序,EF甚至会明智地选择 ?另外,EF生成的插入/更新/删除语句 真的很糟糕吗?
- 将每个属性发送到存储过程都有其自身的性能损失,而EF生成的代码只发送实际更改的属性。在对大型表进行更新时,增加的网络流量和更新所有属性的开销可能会否定存储过程的性能优势。
虽这么说,我的具体问题是:
上面列出的正确我的信念?现在ORM越来越受欢迎,总是使用SP的东西是“老派”的想法吗?根据你的经验,对于所有插入/更新/删除操作使用EF映射SP,或将EF生成的SQL用于CRUD操作并仅将SP用于更复杂的东西,哪种方法更好?
'修改SP需要更新数据模型anyway' SP结束了显著提高应用程序的维护成本,不只是因为你不得不在至少5处(每一个变化每1 SP插入,更新,和删除,至少有一个用于选择,然后也用于实体模型),但也因为对于任何不是简单的CRUD操作的应用程序而言,您都将应用程序逻辑隐藏在应用程序之外,开发人员必须在不同的应用程序之间来回跳动IDE的。 –