вернуть результат с несуществующей сущностью модели - EF. net Core 3 - PullRequest
0 голосов
/ 16 апреля 2020

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

   [HttpGet]
    public async Task<ActionResult> getAllSalaryRanks()
    {
        HttpResponseMessage response = new HttpResponseMessage();

        using(db963Context context = new db963Context())
        {
            var ranks = context.IoVouchersSalaryRanks.FromSqlRaw("EXEC ioVouchers_sp_SalaryRanks").ToList();

            return Ok(ranks);
        }

    }

В приведенном выше примере я получу исключение: The required column 'foo' was not present in the results of a 'FromSql' operation.

В основном IoVouchersSalaryRanks - это одна из моих моделей, поэтому столбцы результата должны быть такими же, как и объект модели. Как я могу добавить объект пользовательской модели, чтобы SP возвращал результаты, соответствующие этой пользовательской модели?

Ответы [ 2 ]

3 голосов
/ 16 апреля 2020

Это означает, что столбец foo не возвращается вашей хранимой процедурой. Попробуйте:

  • добавить свой столбец Foo в свой оператор SELECT
  • или использовать [NotMapped] для своего столбца Foo. Этот атрибут может использоваться для свойств класса сущностей, для которого мы не хотим создавать соответствующие столбцы в базе данных
1 голос
/ 16 апреля 2020

Ваша хранимая процедура ioVouchers_sp_SalaryRanks должна возвращать результат, который может быть сопоставлен с вашей сущностью IoVouchersSalaryRank

Если он возвращает пользовательские результаты, вы должны реализовать его следующим образом:

string query = "EXEC ioVouchers_sp_SalaryRanks";

var ranks = context.Set<CustomModel>().FromSqlRaw(query).ToList();

где CustomModel - это новая сущность, в которой свойства могут быть сопоставлены со столбцами, возвращаемыми вашим SP. Таким образом, если он возвращает только столбец foo с типом string, он будет выглядеть следующим образом:

public class CustomModel
   {
       public string Foo{ get; set; }
   }

Добавьте CustomModel к dbcontext в методе OnModelCreating

        modelBuilder.Entity<CustomModel>().HasNoKey();

I есть сообщение в блоге, которое объясняет это, вы можете посмотреть здесь >> Обновление: https://mohamedsahbi.com/2019/05/22/raw-queries-with-entity-framework-core/

: мой блог был связан с EF Core 2.1. Итак, я только что обновил ответ по работе с EF Core3.1. Вы также можете найти репозитории GitHub с образцом для EF Core 3.1 https://github.com/MohamedSahbi/RawQueryWithEFCore/tree/master/SampleWithEFCore/SampleWithEFCore3.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...