Я работаю с последней версией 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.Вот почему я получаю ошибку.Он этого не допустит, потому что для этого требуется разрешение, хотя в этом случае его нет.