gpt4 book ai didi

c# - Database.SqlQuery 和 EF 6.1 之间的性能有什么区别吗?

转载 作者:行者123 更新时间:2023-12-02 17:40:16 27 4
gpt4 key购买 nike

我有两种不同的方法从 SQL 数据库获取数据:

var sql = @"Select Exam.Name, Test.TestId, Test.QuestionsCount, Test.Title
FROM Test
INNER JOIN Exam
ON ( Test.ExamId = Exam.ExamId)
WHERE Test.TestStatusId = 1";
var tests1 = db.Database.SqlQuery<TestDTO>(sql).ToList();

var tests2 = await db.Tests
.Include(t => t.Exam)
.Where(t => t.TestStatusId == 1)
.Select(t => new TestDTO
{
ExamName = t.Exam.Name,
Id = t.TestId,
QuestionsCount = t.QuestionsCount,
Title = t.Title
})
.ToListAsync();

我意识到第二种方式似乎更“流行”,但是从性能的角度来看,这两种方式之间有什么区别。特别是是否有可能拥有第一种方法的异步版本,或者无论如何拥有它可能带来的好处微乎其微?

最佳答案

这两种检索数据的方法并不相同。

在第二种方法中,您正在编写 LINQ to Entities 查询并拉回包含考试的测试列表。执行查询后,所有测试和考试都将添加到 Entity Framework 更改跟踪器中。

在第一个方法中,您只是使用 Entity Framework 执行一些 SQL 并将其转换为 TestDTO 对象。您的任何实体都不会出现在变更跟踪器中。

第一种方法可能会更快,因为您不涉及跟踪实体,但它们实际上并不具有可比性,因为它们没有做相同的事情。您是否计划对测试和考试进行更改并在 DbContext 上调用 SaveChanges?如果是,那么您将使用第一种方法手动完成所有这些操作。不过,我不确定您为什么要问这个问题,除非您发现第二个查询存在性能问题。如果您不打算使用 EF 来查询数据,那么此时为什么不直接使用 SqlReader 或 DataAdapter。

关于c# - Database.SqlQuery 和 EF 6.1 之间的性能有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24451480/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com