public async Task ExecuteAsync(string spName, TInParams inputParams) { if (JsonWrapperAttributeExtensions.ContainsAttribute <TInParams>()) { await ExecuteWithJsonInputAsync(spName, inputParams); } else { await using SqlConnection connection = new SqlConnection(_connectionString); await connection.ExecuteAsync(spName, inputParams, commandType : CommandType.StoredProcedure); } }
public async Task ExecuteWithJsonInputAsync(string spName, TInParams inputParams) { /* * If input is json so we must to know how to deserialize this * Dapper requires input names to be set * We pass this param name through JsonWrapperAttribute * And create dynamic dictionary wrapper for our object */ await using SqlConnection connection = new SqlConnection(_connectionString); DynamicParameters parameters = new DynamicParameters(new Dictionary <string, object> { { JsonWrapperAttributeExtensions.GetAttributeCustom <TInParams>().StoreProcedureJsonInputName, JsonConvert.SerializeObject(inputParams) } }); await connection.ExecuteAsync(spName, parameters, commandType : CommandType.StoredProcedure); }