protected virtual void CommandParameters(IDbCommand command, TEntity entity, PropertySkip propertyToSkip) { var propPairs = NameValuePropertyPairs(entity, propertyToSkip); foreach (var prop in propPairs) { command.AddParameter($"@{prop.Key}", prop.Value); } }
protected Dictionary <string, object> NameValuePropertyPairs(TEntity entity, PropertySkip propertyToSkip) { var properties = typeof(TEntity).GetProperties(); switch (propertyToSkip) { case PropertySkip.None: return(properties // Collection initializing not gonna work !!!! .ToDictionary(prop => prop.Name, prop => prop.GetValue(entity))); case PropertySkip.PrimaryKey: return(properties.Where(prop => prop.Name != $"{tEntityName}Id").ToDictionary(prop => prop.Name, prop => prop.GetValue(entity))); default: throw new Exception(); // Create exception !!!! } }
protected virtual List <string> GenerateCommandInputStrings(TEntity entity, Operation operation, PropertySkip propertyToSkip) { var propPairs = NameValuePropertyPairs(entity, propertyToSkip); switch (operation) { case Operation.Create: return(GenerateCreateInputStrings()); case Operation.Update: return(GenerateUpdateInputStrings()); default: throw new Exception(); // Create exception !!!! } List <string> GenerateCreateInputStrings() { StringBuilder columnsBuilder = new StringBuilder(); StringBuilder valuesBuilder = new StringBuilder(); foreach (var kvp in propPairs) { columnsBuilder.Append($"{kvp.Key},"); valuesBuilder.Append($"@{kvp.Key},"); } columnsBuilder.Remove(columnsBuilder.Length - 1, 1); valuesBuilder.Remove(valuesBuilder.Length - 1, 1); return(new List <string>() { columnsBuilder.ToString(), valuesBuilder.ToString() }); } List <string> GenerateUpdateInputStrings() { StringBuilder colValsBuilder = new StringBuilder(); foreach (var kvp in propPairs) { colValsBuilder.Append($"{kvp.Key}=@{kvp.Key},"); } colValsBuilder.Remove(colValsBuilder.Length - 1, 1); return(new List <string>() { colValsBuilder.ToString() }); } }