/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="definition"></param> /// <param name="parameter"></param> /// <returns></returns> public static T Execute <T>(this ICommandDefinition definition, T parameter = null) where T : class { using (var connection = new SqlConnection(definition.ConnectionString)) { using (var command = definition.GetCommand()) { command.Connection = connection; connection.Open(); try { ParameterMethods.SetInputs(parameter, command); command.ExecuteNonQuery(); ParameterMethods.SetOutputs(parameter, command); } catch (SqlException sqlEx) when(sqlEx.ShouldTryReexecute()) { if (command.IsCommandBuilt()) { parameter = definition.Execute(parameter); } else { throw sqlEx; } } catch { throw; } } } return(parameter); }
/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="parameter"></param> /// <param name="definition"></param> /// <returns></returns> public static T Execute <T>(this T parameter, ICommandDefinition definition) where T : class => definition.Execute(parameter);
/// <summary> /// /// </summary> /// <param name="definition"></param> /// <param name="parameter"></param> /// <returns></returns> public static Dynamic Execute(this ICommandDefinition definition, Dynamic parameter = null) => definition.Execute <Dynamic>(parameter);