Система.Исключение InvalidOperationException в Dapper

#asp.net #asp.net-web-api #orm #dapper

#asp.net #asp.net-web-api #orm #dapper

Вопрос:

я собираюсь использовать dapper в качестве своего ORM в проекте asp .net. Итак, проблема в том, что я собираюсь выполнить свою процедуру, чтобы вернуть данные get по идентификатору. Если идентификатор не существует, ошибка отображается следующим образом

Последовательность не содержит элементов

есть ли какое-либо решение для предотвращения ошибки с помощью dapper? потому что другое решение использует entity framework.

вот мой код

 var SP_Name = "SP_GetSupplierById";
parameters.Add("@Id", Id);
var getSupplierById = connection.QuerySingle<Supplier>(SP_Name,parameters,commandType:CommandType.StoredProcedure);
return getSupplierById;
 

и вот моя процедура

 CREATE PROCEDURE SP_GetSupplierById
@Id int
AS
    SELECT * from TB_M_Supplier where id = @Id;
RETURN 0
 

Спасибо за вашу помощь

Ответ №1:

QuerySingle утверждает, что возвращается ровно одна строка; не ноль, не кратно. Если допустимо значение нуля, то вы можете использовать QuerySingleOrDefault — и проверить значение по умолчанию, которое будет null в случае ссылочных типов (классов). QuerySingleOrDefault только утверждает, что нет нескольких строк; ноль в порядке.

Итак

 var getSupplierById = connection.QuerySingleOrDefault<Supplier>(SP_Name,parameters,commandType:CommandType.StoredProcedure);
return getSupplierById; // todo: consider null