Работа с типами запросов и необязательными свойствами - PullRequest
0 голосов
/ 19 октября 2018

Я работаю с последней версией EF Core, я разработал, как создавать типы запросов, чтобы я мог получать результаты из хранимой процедуры в свой dbContext, создавая пользовательскую модель и добавляя ее в мой метод dbContext OnModelCreating.

Я хочу использовать одну и ту же модель для двух разных хранимых процедур.Вот пример проблемы.

public class Program
{
    public string Name { get; set; }
    public int? Permission { get; set; }
}

Итак, у меня есть две разные имена хранимых процедур.Один называется say usp_GetProgram, а другой называется usp_GetProgramWithPermission.Один SP просто возвращает имя, а второй возвращает имя и разрешение.

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

 "The required column 'Permission' was not present in the results of a 'FromSql' operation."

Я вроде как понимаю, что здесь происходит, как мы видим в приведенном выше сообщении об исключении.Я задавался вопросом, могу ли я что-то сделать, чтобы поле Permission просто игнорировалось, если его нет в результатах.Я попытался сделать его обнуляемым, и это не сработало.

У меня есть решение, у меня 2 * типа запросов.Один для каждого SP.Так что ..

public class Program
{
    public string Name { get; set; }
}

затем

public class ProgramWithPermission
{
    public string Name { get; set; }
    public int? Permission { get; set; }
}

Просто вещи запутываются, и я хотел попытаться использовать их немного лучше.Я не могу изменить SP также.Я задавался вопросом, было ли что-то, что я пропускаю и мог ли я быть направлен в правильном направлении.Или у нас просто есть свой собственный тип запроса для каждого тонкого различия в наших результатах.

* ОТВЕТ НА НИЖЕ КОММЕНТАРИЙ * Я делаю что-то вроде этого

  return await _context
                .Query<Entities.Custom.ProgramWithPermission>()
                .FromSql("EXECUTE usp_GetProgramWithoutPermission @UserID", parameters)
                .ToListAsync();

Так, скажем, вышеупомянутый SP возвращает только Имя, и я пытаюсь втиснуть его в ProgramWithPermission.Вот почему я получаю ошибку.Он этого не допустит, потому что для этого требуется разрешение, хотя в этом случае его нет.

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