Выполните процедуру и верните данные из разных таблиц в Net 5

0

Вопрос

Я пытаюсь запустить процедуру в RESTful API с NET 5 и Entity Framework Core 5, процедура возвращает данные из разных таблиц.

Проблема, с которой я столкнулся, заключается в том, что я не знаю, как выполнить процедуру для последующего возврата данных в классе DetailsClientsDto.

Попробуйте выполнить процедуру следующими способами, но безуспешно:

var result = await _context.Database.SqlQuery<DetailsClientsDto>("EXEC [dbo].[SPROC_DETAILS] @ID_USER", sqlParameters);

var result = await _context.SqlQuery<DetailsClientsDto>("EXEC [dbo].[SPROC_DETAILS] @ID_USER", sqlParameters);

Из-за ошибки:

DataBase facade does not contain a definition for SqlQuery. Is there a using directive missing?

Метод, который я использую, заключается в следующем:

private readonly MarketContext _context;
public ClientsRepository(MarketContext context) : base(context)
{
    _context = context;
}

public async Task<DetailsClientsDto> GetDetailsRepository(SearchDetailsDto details)
{
    var sqlParameters = new[]
    {
        new SqlParameter
        {
            ParameterName = "ID_USER",
            Value = details.IdUser,
            SqlDbType = SqlDbType.Int,
        },
        new SqlParameter
        {
            ParameterName = "ID_CLIENT",
            Value = detalles.IdClient,
            SqlDbType = SqlDbType.Int,
            IsNullable=true
        },
    };
    
    return await Task.Run(async () =>
    {
        var result = await _context.Database.SqlQuery<DetailsClientsDto>("EXEC [dbo].[SPROC_DETAILS] @ID_USER", sqlParameters);

        return result;
    }); 
}

public class DetailsClientsDto
{
    public int IdUser { get; set; }
    public int IdClient { get; set; }
    public string User { get; set; }
    public string Adress { get; set; }
    public string Car { get; set; }
    public string Color { get; set; }
}

Пожалуйста, не могли бы вы сказать мне, как я должен выполнить процедуру и вернуть данные, спасибо.

1

Лучший ответ

0

Это пример:

// Load this namespace to use SqlParameter
using Microsoft.Data.SqlClient;

//.. or use db.Set<DetailsClientsDto>()
var result = await db.DetailsClientsDto 
  .FromSqlRaw("EXEC [dbo].[SPROC_DETAILS] @idUser, @anotherParam", 
    new SqlParameter("idUser", value1),     
    new SqlParameter("anotherParam", value2))
  .AsNoTracking()
  .ToListAsync()
2021-11-24 01:46:45

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................