У меня проблемы с пониманием предложения FromSql, которое вызывает хранимую процедуру.Чего я хочу добиться: я хочу запросить у пользователя имя пользователя и пароль.Если я введу правильные учетные данные, все работает нормально.Предложение FromSql заполняет мой объект значениями.Хорошо пока.Что меня беспокоит, так это следующий сценарий: если я запускаю приложение заново и ввожу неправильные учетные данные в первый раз , я получаю следующее исключение:
Microsoft.EntityFrameworkCore.Query:Error: An exception occurred in the database while iterating the results of a query for context type 'xyz.DatabaseContext'.
System.InvalidOperationException: The required column 'Id' was not present in the results of a 'FromSql' operation.
Я такжепонять это исключение.Хранимая процедура возвращает 0, если пользователь не найден, и EF пытается отобразить этот «пустой» результат в объект, который завершается неудачей.
Теперь вот странная вещь: если я попробую его с пользователем с действительными учетными данными и впоследствии введите неверные учетные данные, исключений не возникает.У queryResult есть счетчик 0, что является своего рода ожидаемым.Это смущает меня.Почему происходит сбой при первой «неправильной» попытке, и после этого работает успешный результат?
Вот вызов хранимой процедуры:
queryResult = await mDatabaseContext.MyModelObject
.FromSql($"myStoredProcedure {null}, {username}, {password}, {null}, {null}, {null}")
.OrderBy(x => x.ID).ToListAsync();
Конфигурация: In Startup.cs
Iдобавьте DatabaseContext как singleton
services.AddDbContext<DatabaseContext>(
options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")),
ServiceLifetime.Singleton);
Я использую DatabaseContext через Dependency-Injection, где я вызываю FromSql, который я описал выше.
Любая помощь приветствуется.
Заранее спасибо!