实体框架 – 通过存储过程完成所有数据访问时的实体框架

数据库架构师已经强制要求所有对数据库的访问都将通过存储过程完成.没有摆动的空间.话虽如此,使用Entity Framework而不是ADO.NET来调用存储过程仍然有好处吗?

实体框架对我来说似乎总是不必要的附加层,但在更新可能嵌套且具有复杂关系的复杂对象集时确实有一些好处.但是,现在所有访问都必须通过存储过程完成,我没有看到实体框架的任何额外好处.在我看来,ADO.NET“更接近金属”.

但这就是我提出这个问题的原因.当所有数据访问必须通过存储过程完成时,使用Entity Framework还有其他好处吗?

最佳答案
取决于您的数据访问策略.

存储过程是否用于执行完整的CRUD操作?
在这种情况下,没有数据从存储过程中共享,因此所有实体框架都会运行它.虽然这只需要几行代码,但实体框架具有POCOS,模型,映射等功能,这些功能可能需要数千行代码,具体取决于您的数据库,您很可能不会使用(为什么强类型的.NET)代码库中的对象,当你永远不会将任何数据输入它们时?最好它们会在Intellisense中弹出并让你的开发人员感到困惑).因此,它成为开销,更不用说不可避免的学习曲线了.相反,您可以使用ADO类来运行存储过程,代码将相对简单且自包含,并且将比实体框架更快地启动和运行(在这种情况下,学习曲线并不多).

存储过程是否用于读取数据? (例如,创建报告或作为OLAP系统的一部分)
在这种情况下,它们将返回必须以某种方式映射到对象的结果集.您可以使用Entity Framework和ADO执行此操作,但由于它附带的代码生成工具,它可能更容易和更快地使用Entity Framework.通常数据将被推送到POCO,然后将用于实现业务逻辑.使用ADO,您仍然需要“手动”创建POCO,并且根据数据库的复杂性,这可能是一项值得注意的任务.

存储过程是用于只读还是CRUD操作?在这种情况下,它是一个涉及更多因素的判断调用(与所有架构决策一样).一般而言,最好与您的数据访问策略大致一致,因此如果实体框架将在一个领域提供好处,那么值得检查其他领域是否也会受益.请记住,在当前版本的Entity Framework中,某些操作并不是非常有效,例如批处理.然后需要考虑以下因素做出决定:

>数据库范围(大或小?)
>系统范围(高流量还是低流量?如果性能是一个严肃的考虑因素,有一个school of thought对于高流量系统使用实体框架是谨慎的)
>未来的发展(未来系统是否需要容纳更多的CRUD或只读操作?)
>学习曲线(您的团队中是否有人了解实体框架?)

希望这可以帮助.

转载注明原文:实体框架 – 通过存储过程完成所有数据访问时的实体框架 - 代码日志