实体框架中的存储过程对ADO.NET

问题描述 投票:1回答:1

对于我的一个项目,我正在使用Entity Framework连接到SQL Server数据库。由于诸如(1000-100000)插入/更新/删除之类的大量数据,我不得不使用具有用户定义表类型的存储过程作为参数来提高性能。

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

在Entity Framework(存储库模式)中实现相同会造成性能问题。我们也可以从Entity Framework调用存储过程]

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

  1. 从Entity Framework调用存储过程(如果是,请提出一些文章来实现它)
  2. 从ADO.Net调用存储过程

提前感谢。

Udhay

sql-server entity-framework ado.net-entity-data-model
1个回答
0
投票

我将避免使用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
 }
© www.soinside.com 2019 - 2024. All rights reserved.