数据库架构师已经强制要求所有对数据库的访问都将通过存储过程完成。没有摆动的空间。话虽如此,使用Entity Framework而不是ADO.NET来调用存储过程仍然有好处吗?
实体框架对我来说似乎总是不必要的附加层,但在更新可能嵌套且具有复杂关系的复杂对象集时确实有一些好处。但是,现在所有访问都必须通过存储过程完成,我没有看到实体框架的任何额外好处。在我看来,ADO.NET“更接近金属”。
但这就是我提出这个问题的原因。当必须通过存储过程完成所有数据访问时,使用Entity Framework还有其他好处吗?
答案 0 :(得分:3)
取决于您的数据访问策略。
存储过程是否用于执行完整的CRUD操作? 在这种情况下,没有数据从存储过程中共享,因此所有实体框架都会运行它。虽然只需几行代码,但实体框架具有POCOS,模型,映射等功能,根据您的数据库可能需要数千行代码,您很可能不使用 (为什么在你的代码库中有强类型的.NET对象,当你永远不会将任何数据输入它们?最好它们会在Intellisense中弹出并让你的开发人员感到困惑)。因此,它成为开销,更不用说不可避免的学习曲线了。相反,您可以使用ADO类来运行存储过程,代码将相对简单且自包含,并且将比实体框架更快地启动和运行(在这种情况下,学习曲线并不多)。
存储过程是否用于读取数据? (例如,创建报告或作为OLAP系统的一部分) 在这种情况下,它们将返回必须以某种方式映射到对象的结果集。您可以使用Entity Framework和ADO执行此操作,但由于它附带的代码生成工具,它可能更容易和更快地使用Entity Framework。通常,数据将被推送到POCO,然后将用于实现业务逻辑。使用ADO,您仍然需要“手动”创建POCO,并且根据数据库的复杂性,这可能是一项值得注意的任务。
存储过程是用于只读还是CRUD操作?在这种情况下,它是一个涉及更多因素的判断调用(与所有架构决策一样)。一般而言,最好与您的数据访问策略大致一致,因此如果实体框架将在一个领域提供好处,那么值得检查其他领域是否也会受益。请记住,在当前版本的Entity Framework中,某些操作并不是非常有效,例如批处理。然后需要考虑以下因素做出决定:
希望这有帮助。