首页 > 解决方案 > 实体框架与 ADO.NET 中的存储过程

问题描述

对于我的一个项目,我使用实体框架连接到 SQL Server 数据库。由于像 (1000 - 100000) 插入/更新/删除这样的大量数据,我不得不使用带有用户定义表类型的存储过程作为参数来提高性能。

此外,这些插入/更新/删除操作涉及来自多个其他表的数据作为依赖。因此,我使用带有适当临时表的存储过程和带有连接查询的 CTE(这是一个相当复杂的 JOIN)来实现所需的结果。

在实体框架(存储库模式)中实现相同目标会产生性能问题。我们也可以从实体框架调用存储过程

现在,我的问题是:在上述情况下哪个更好?

  1. 从实体框架调用存储过程(如果是,请推荐一些文章来实现它)
  2. 从 ADO.Net 调用存储过程

提前致谢。

乌德海

标签: sql-serverentity-frameworkado.net-entity-data-model

解决方案


我会避免使用 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
 }

推荐阅读