Есть ли способ, которым я могу запустить базу данных.SqlQuery как асинхронный?

#c# #asp.net #asp.net-mvc #asp.net-web-api

#c# #asp.net #asp.net-mvc #asp.net-web-api

Вопрос:

У меня есть следующее:

 var sql = @"Select 
                case when Test.TestTypeId = 1 then Exam.Name
                     when Test.TestTypeId = 2 then Topic.Name
                end as Name,
                Test.Title,
                Test.TestId,
                Test.QuestionsCount
            FROM Test
            LEFT JOIN Exam ON Test.ExamId = Exam.ExamId
            LEFT JOIN Topic ON Test.TopicId = Topic.TopicId
            WHERE Test.TestStatusId = 1 -- Current";
var tests = db.Database.SqlQuery<TestDTO>(sql).ToList();
 

Я искал для этого асинхронный метод, но, похоже, его не существует. Есть ли способ, которым я могу запустить это асинхронно?

Ответ №1:

Если вы используете Entity Framework 6, вам просто нужно указать

 using System.Data.Entity;
 

в верхней части вашего файла.

ToListAsync является ли метод расширения IQueryable<T> объявленным в System.Data.Entity.QueryableExtensions

Комментарии:

1. Как вы сказали, ToListAsync это только to IQueryable , SqlQuery возвращает IEnumerable<T>

2. @JeanCarlos Нет, он возвращает DbRawSqlQuery<T> , который реализует IDbAsyncEnumerable<T> , а также такие методы, как ToListAsync<T> напрямую.