何时在 Entity Framework Code First 中使用存储过程和 SQL 查询
When to use stored procedures and SQL queries in Entity Framework Code First
在 EF 代码优先中,特别是在 ASP.NET Web 开发中,存储过程和 SQL 查询的适当用途是什么?在开始使用 Entity Framework 之前,我非常依赖它们。但是,有了 Entity Framework,希望我们不需要担心编写 SQL 和创建存储过程来创建、插入、更新和读取数据等
我知道在某些情况下使用 SQL 在 EF 中可能会很好,例如清除整个 table 时:
dbcontext.Database.ExecuteSqlCommand("delete from MyTable");
我不想低估存储过程和 SQL 查询的可用性,并且想了解它们在 EF 代码优先应用程序中可能有用的场景。您能否分享您自己项目中的良好做法?
很少(<0.1%)您会遇到使用存储过程的情况,其余 99.9% 的情况下您应该使用 ORM 或 entity framework。
以下是我使用存储过程的几个实例。
i) 全文搜索 与 Google 类似,具有复杂的要求,如邻近搜索、分词器、词干分析器、INFLECTIONAL 等
ii) 某些 table 列是 加密的 ,并且您在条件语句中查询这些列。
iii) 对于数据库到数据库的迁移,sql 作业等
可能还有其他几个我现在想不起来了。
在我的 意见 中,我认为有很多时候您可能需要做一些非常复杂的事情,这需要在存储过程中保持这种复杂性。
一些示例可能包括;
BULK INSERT
用户上传文件的操作要处理
- 递归 CTE
- 使用 Temp Tables/Table 变量执行高级处理
- 利用现有的数据库功能、过程、链接服务器等
- 查询足够高级以至于使用 ORM 生成的查询计划不是最佳的实例,并且您知道您可以使用普通 SQL 做得更好。也能够在 SQL 中使用查询提示是非常有益的(尽管也很少见)
我过去参与过一些项目,我们让 ORM 处理绝大多数实例,但在少数地方我们推迟到手工制作 SQL合适的。
我不建议任何 ORM 都适合 所有 任务。
在某种程度上,我还建议您的开发团队的能力也可以帮助您决定在何处使用什么。您的 ORM 可能适用于简单的 CRUD 和半高级搜索类型查询。然而,对于更复杂的处理,如果你的团队要花两倍的时间在 ORM 中尝试做某事而不是简单地在 SQL 中做,那么你必须问这是否是对时间和金钱的良好利用.
在 EF 代码优先中,特别是在 ASP.NET Web 开发中,存储过程和 SQL 查询的适当用途是什么?在开始使用 Entity Framework 之前,我非常依赖它们。但是,有了 Entity Framework,希望我们不需要担心编写 SQL 和创建存储过程来创建、插入、更新和读取数据等
我知道在某些情况下使用 SQL 在 EF 中可能会很好,例如清除整个 table 时:
dbcontext.Database.ExecuteSqlCommand("delete from MyTable");
我不想低估存储过程和 SQL 查询的可用性,并且想了解它们在 EF 代码优先应用程序中可能有用的场景。您能否分享您自己项目中的良好做法?
很少(<0.1%)您会遇到使用存储过程的情况,其余 99.9% 的情况下您应该使用 ORM 或 entity framework。
以下是我使用存储过程的几个实例。
i) 全文搜索 与 Google 类似,具有复杂的要求,如邻近搜索、分词器、词干分析器、INFLECTIONAL 等
ii) 某些 table 列是 加密的 ,并且您在条件语句中查询这些列。
iii) 对于数据库到数据库的迁移,sql 作业等
可能还有其他几个我现在想不起来了。
在我的 意见 中,我认为有很多时候您可能需要做一些非常复杂的事情,这需要在存储过程中保持这种复杂性。
一些示例可能包括;
BULK INSERT
用户上传文件的操作要处理- 递归 CTE
- 使用 Temp Tables/Table 变量执行高级处理
- 利用现有的数据库功能、过程、链接服务器等
- 查询足够高级以至于使用 ORM 生成的查询计划不是最佳的实例,并且您知道您可以使用普通 SQL 做得更好。也能够在 SQL 中使用查询提示是非常有益的(尽管也很少见)
我过去参与过一些项目,我们让 ORM 处理绝大多数实例,但在少数地方我们推迟到手工制作 SQL合适的。
我不建议任何 ORM 都适合 所有 任务。
在某种程度上,我还建议您的开发团队的能力也可以帮助您决定在何处使用什么。您的 ORM 可能适用于简单的 CRUD 和半高级搜索类型查询。然而,对于更复杂的处理,如果你的团队要花两倍的时间在 ORM 中尝试做某事而不是简单地在 SQL 中做,那么你必须问这是否是对时间和金钱的良好利用.