Entity Framework 当所有数据访问都通过存储过程完成时
Entity Framework when all data access is done via stored procedures
数据库架构师已规定对数据库的所有访问都将通过存储过程完成。没有回旋余地。话虽如此,使用 Entity Framework 而不是 ADO.NET 来调用存储过程仍然有好处吗?
Entity Framework 对我来说似乎总是不必要的附加层,但在更新可能嵌套且具有复杂关系的复杂对象集时确实有一些好处。但是,现在所有访问都必须通过存储过程完成,我看不到 Entity Framework 的任何额外好处。在我看来 ADO.NET 是 "closer to the metal".
但这就是我问这个问题的原因。当所有数据访问都必须通过存储过程完成时,使用 Entity Framework 还有其他好处吗?
取决于您的数据访问策略。
存储过程是否用于执行完整的 CRUD 操作?
在这种情况下,没有数据从存储过程中共享出来,所以 Entity Framework 要做的就是 运行 它。虽然这只需要几行代码,但 Entity Framework 具有 POCOS、模型、映射等功能,根据您的数据库,这些功能可能需要数千行代码,您很可能 不会use(当您永远不会将任何数据推送到它们时,为什么要在您的代码库中使用强类型的 .NET 对象?充其量它们会在 Intellisense 中弹出并使您的开发人员感到困惑)。因此它变成了开销,更不用说不可避免的学习曲线了。相反,您可以使用 ADO 类 来 运行 您的存储过程,代码将相对简单且自包含,并且启动和 运行ning 比 Entity Framework 更快(在这种情况下学习曲线并不大)。
存储过程是用来读取数据的吗? (例如,创建报告或作为 OLAP 系统的一部分)
在这种情况下,他们将 return 结果集必须以某种方式映射到一个对象。您可以使用 Entity Framework 和 ADO 来完成此操作,尽管使用 Entity Framework 可能会更容易和更快,因为它附带了代码生成工具。通常数据会被推送到 POCO 中,然后用于实现业务逻辑。使用 ADO,您仍然需要创建一个 POCO "by hand",并且根据您的数据库的复杂性,这可能是一项相当重要的任务。
存储过程是否同时用于只读和 CRUD 操作?在这种情况下,这是一个涉及更多因素的判断调用(与所有架构决策一样)。一般来说,最好与您的数据访问策略大体一致,因此如果 Entity Framework 将在一个领域提供好处,那么值得检查其他领域是否也会受益。请记住,在当前版本的 Entity Framework 中,有些事情不是很有效地完成,例如批处理。然后需要考虑以下因素做出决定:
- 数据库范围(大还是小?)
- 系统范围(高流量还是低流量?有一个 school of thought 在认真考虑性能的情况下对高流量系统使用 Entity Framework 持谨慎态度)
- 未来的发展(未来系统是否需要容纳更多的CRUD或只读操作?)
- 学习曲线(您的团队中有人知道 Entity Framework 吗?)
希望对您有所帮助。
数据库架构师已规定对数据库的所有访问都将通过存储过程完成。没有回旋余地。话虽如此,使用 Entity Framework 而不是 ADO.NET 来调用存储过程仍然有好处吗?
Entity Framework 对我来说似乎总是不必要的附加层,但在更新可能嵌套且具有复杂关系的复杂对象集时确实有一些好处。但是,现在所有访问都必须通过存储过程完成,我看不到 Entity Framework 的任何额外好处。在我看来 ADO.NET 是 "closer to the metal".
但这就是我问这个问题的原因。当所有数据访问都必须通过存储过程完成时,使用 Entity Framework 还有其他好处吗?
取决于您的数据访问策略。
存储过程是否用于执行完整的 CRUD 操作? 在这种情况下,没有数据从存储过程中共享出来,所以 Entity Framework 要做的就是 运行 它。虽然这只需要几行代码,但 Entity Framework 具有 POCOS、模型、映射等功能,根据您的数据库,这些功能可能需要数千行代码,您很可能 不会use(当您永远不会将任何数据推送到它们时,为什么要在您的代码库中使用强类型的 .NET 对象?充其量它们会在 Intellisense 中弹出并使您的开发人员感到困惑)。因此它变成了开销,更不用说不可避免的学习曲线了。相反,您可以使用 ADO 类 来 运行 您的存储过程,代码将相对简单且自包含,并且启动和 运行ning 比 Entity Framework 更快(在这种情况下学习曲线并不大)。
存储过程是用来读取数据的吗? (例如,创建报告或作为 OLAP 系统的一部分) 在这种情况下,他们将 return 结果集必须以某种方式映射到一个对象。您可以使用 Entity Framework 和 ADO 来完成此操作,尽管使用 Entity Framework 可能会更容易和更快,因为它附带了代码生成工具。通常数据会被推送到 POCO 中,然后用于实现业务逻辑。使用 ADO,您仍然需要创建一个 POCO "by hand",并且根据您的数据库的复杂性,这可能是一项相当重要的任务。
存储过程是否同时用于只读和 CRUD 操作?在这种情况下,这是一个涉及更多因素的判断调用(与所有架构决策一样)。一般来说,最好与您的数据访问策略大体一致,因此如果 Entity Framework 将在一个领域提供好处,那么值得检查其他领域是否也会受益。请记住,在当前版本的 Entity Framework 中,有些事情不是很有效地完成,例如批处理。然后需要考虑以下因素做出决定:
- 数据库范围(大还是小?)
- 系统范围(高流量还是低流量?有一个 school of thought 在认真考虑性能的情况下对高流量系统使用 Entity Framework 持谨慎态度)
- 未来的发展(未来系统是否需要容纳更多的CRUD或只读操作?)
- 学习曲线(您的团队中有人知道 Entity Framework 吗?)
希望对您有所帮助。