sql-server - 实体框架与 ADO.NET 中的存储过程
问题描述
对于我的一个项目,我使用实体框架连接到 SQL Server 数据库。由于像 (1000 - 100000) 插入/更新/删除这样的大量数据,我不得不使用带有用户定义表类型的存储过程作为参数来提高性能。
此外,这些插入/更新/删除操作涉及来自多个其他表的数据作为依赖。因此,我使用带有适当临时表的存储过程和带有连接查询的 CTE(这是一个相当复杂的 JOIN)来实现所需的结果。
在实体框架(存储库模式)中实现相同目标会产生性能问题。我们也可以从实体框架调用存储过程
现在,我的问题是:在上述情况下哪个更好?
- 从实体框架调用存储过程(如果是,请推荐一些文章来实现它)
- 从 ADO.Net 调用存储过程
提前致谢。
乌德海
解决方案
我会避免使用 Entity Framework/Entity Framework Core 实现存储库模式,因为它已经实现了存储库模式。具体来说,DbContext 是您的 UoW(工作单元),每个 DbSet 都是存储库。在此之上应用另一层是多余的,并且会使维护更加困难。
关于您的具体问题,如果您所做的只是调用存储过程,您应该考虑使用Dapper vs. Entity Framework,因为根据底层查询,开销更少,性能可能更好。它还将处理将结果映射到强类型类。
代码片段
using (var connection = new SqlConnection("your connection string"))
{
await connection.OpenAsync();
var results = await connection.QueryAsync<SomeClass>("SomeStoredProc",
new {Param1 = value},
commandType: CommandType.StoredProcedure).ToList();
// ... more code
}
推荐阅读
- c# - Google Recaptcha 工具提示翻译
- angular - 如何从打字稿角度的界面设置默认属性值?
- iis - 如何确保本地iis访问安全?
- javascript - PanGestureHandler 下无法点击 - React Native
- c++ - 具有在参数中返回指针的函数的智能指针
- android - Android 命令行工具 Panic Android_SDK_root 损坏
- linux - ARM64调用约定:少于8个参数时保存调用者或被调用者?
- java - ClassLoadingException & ClassNotFoundException 引起的休眠 ServiceException
- reactjs - YUP/react-hook-form 如何使用去抖动和动态消息创建异步验证
- javascript - Internet Explorer 11 和 javascript Date.toLocaleDateString() 生成隐藏字符