Как получить результат запроса от ExecuteSqlInterpolatedAsync?

Entity Framework Core 3.0 представил новый метод ExecuteSqlInterpolatedAsync, как описано здесь:

RelationalDatabaseFacadeExtensions.ExecuteSqlInterpolatedAsync() < /а>

Пример запроса таков:

context.Database.ExecuteSqlInterpolatedAsync($"SELECT * FROM [dbo].[SearchBlogs]({userSuppliedSearchTerm})");

Как получить результаты, возвращаемые этим запросом? Это вообще возможно?


person Rosdi Kasim    schedule 19.11.2019    source источник
comment
Для запросов используйте один из FromSql методов — см. Необработанные SQL-запросы< /а>   -  person Ivan Stoev    schedule 19.11.2019


Ответы (2)


ExecuteSqlInterpolatedAsync возвращает количество затронутых строк в качестве результата задачи. Используйте FromSqlInterpolated для получения результатов. Пример использования см. в этой проблеме.

person Gib Bowden    schedule 30.03.2020

Если вы обновляете записи в базе данных, вы будете использовать ExecuteSqlInterpolatedAsync, и он возвращает целое число, указывающее общее количество записей, затронутых изменением, и если у вас также есть хранимая процедура в базе данных, предназначенная для обновления, удаления или создания записей, вы можете использовать ExecuteSqlInterpolatedAsync, например;

var affectedrows = await context.Database.ExecuteSqlInterpolatedAsync($"Exec CustomerUpdate {id}");

где id — это ожидаемый параметр хранимой процедуры в данном контексте. Но для вашего вопроса вам нужно сделать следующее;

  1. Создайте класс, скажем, HeadCash ,

    [Keyless]
    public class HeadCash
    {
          public string EmployeeID { get; set; }
    }
    
  2. Добавьте класс в DBContext как DbSet, например;

      public virtual DbSet<HeadCash> HeadCash { get; set; }
    
  3. Создайте метод для генерации необходимых вам данных, например, в вашем классе выполнения;

     public async Task<IEnumerable<HeadCash>> CheckHeadCash(string Id)
     {
         try
         {
             var headcash =await _context.HeadCash.FromSqlInterpolated($"EXEC 
               GetHeadCash {Id}").ToListAsync();
    
             return headcash;
         }
         catch (Exception)
         {
    
             throw;
         }
     }
    

Обратите внимание: не забудьте добавить атрибут [KeyLess] в класс, как на шаге 1 выше.

person Ibrahim Mohammed    schedule 15.06.2020