diff --git a/Dapper.sln b/Dapper.sln index e993c7a4..5cc87d42 100644 --- a/Dapper.sln +++ b/Dapper.sln @@ -16,8 +16,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution version.json = version.json EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dapper.Contrib", "Dapper.Contrib\Dapper.Contrib.csproj", "{4E409F8F-CFBB-4332-8B0A-FD5A283051FD}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dapper.Tests.Contrib", "tests\Dapper.Tests.Contrib\Dapper.Tests.Contrib.csproj", "{DAB3C5B7-BCD1-4A5F-BB6B-50D2BB63DB4A}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{4E956F6B-6BD8-46F5-BC85-49292FF8F9AB}" @@ -32,27 +30,29 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{568BD46C tests\docker-compose.yml = tests\docker-compose.yml EndProjectSection EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dapper.Contrib", "src\Dapper.Contrib\Dapper.Contrib.csproj", "{FA57085B-01A0-42BC-8B52-03712371C4AB}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {4E409F8F-CFBB-4332-8B0A-FD5A283051FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4E409F8F-CFBB-4332-8B0A-FD5A283051FD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4E409F8F-CFBB-4332-8B0A-FD5A283051FD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4E409F8F-CFBB-4332-8B0A-FD5A283051FD}.Release|Any CPU.Build.0 = Release|Any CPU {DAB3C5B7-BCD1-4A5F-BB6B-50D2BB63DB4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DAB3C5B7-BCD1-4A5F-BB6B-50D2BB63DB4A}.Debug|Any CPU.Build.0 = Debug|Any CPU {DAB3C5B7-BCD1-4A5F-BB6B-50D2BB63DB4A}.Release|Any CPU.ActiveCfg = Release|Any CPU {DAB3C5B7-BCD1-4A5F-BB6B-50D2BB63DB4A}.Release|Any CPU.Build.0 = Release|Any CPU + {FA57085B-01A0-42BC-8B52-03712371C4AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FA57085B-01A0-42BC-8B52-03712371C4AB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FA57085B-01A0-42BC-8B52-03712371C4AB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FA57085B-01A0-42BC-8B52-03712371C4AB}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {4E409F8F-CFBB-4332-8B0A-FD5A283051FD} = {4E956F6B-6BD8-46F5-BC85-49292FF8F9AB} {DAB3C5B7-BCD1-4A5F-BB6B-50D2BB63DB4A} = {568BD46C-1C65-4D44-870C-12CD72563262} + {FA57085B-01A0-42BC-8B52-03712371C4AB} = {4E956F6B-6BD8-46F5-BC85-49292FF8F9AB} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {928A4226-96F3-409A-8A83-9E7444488710} diff --git a/src/Dapper.Contrib/ColumnNameFormat.cs b/src/Dapper.Contrib/ColumnNameFormat.cs new file mode 100644 index 00000000..7ed38a64 --- /dev/null +++ b/src/Dapper.Contrib/ColumnNameFormat.cs @@ -0,0 +1,8 @@ +namespace Dapper.Contrib.Extensions +{ + public enum ColumnNameFormat : short + { + None = 0, + LowerCase = 10, //I'll only implement this. + } +} diff --git a/src/Dapper.Contrib/DefaultColumnNameFormatter.cs b/src/Dapper.Contrib/DefaultColumnNameFormatter.cs new file mode 100644 index 00000000..c146abea --- /dev/null +++ b/src/Dapper.Contrib/DefaultColumnNameFormatter.cs @@ -0,0 +1,29 @@ +namespace Dapper.Contrib.Extensions +{ + public class DefaultColumnNameFormatter : IColumnNameFormatter + { + + public ColumnNameFormat ColumnNameFormat { get; set; } + public DefaultColumnNameFormatter() + { + } + + public DefaultColumnNameFormatter(ColumnNameFormat columnNameFormat) + { + ColumnNameFormat = columnNameFormat; + } + + public string Format(string name) + { + switch(ColumnNameFormat) + { + case ColumnNameFormat.LowerCase: + return name.ToLower(); + break; + default: + return name; + } + } + } + +} diff --git a/src/Dapper.Contrib/IColumnNameFormatter.cs b/src/Dapper.Contrib/IColumnNameFormatter.cs new file mode 100644 index 00000000..0abbc3ab --- /dev/null +++ b/src/Dapper.Contrib/IColumnNameFormatter.cs @@ -0,0 +1,7 @@ +namespace Dapper.Contrib.Extensions +{ + public interface IColumnNameFormatter + { + string Format(string name); + } +} diff --git a/src/Dapper.Contrib/LowerCaseColumnNameFormatter.cs b/src/Dapper.Contrib/LowerCaseColumnNameFormatter.cs new file mode 100644 index 00000000..ccbece69 --- /dev/null +++ b/src/Dapper.Contrib/LowerCaseColumnNameFormatter.cs @@ -0,0 +1,11 @@ +namespace Dapper.Contrib.Extensions +{ + public class LowerCaseColumnNameFormatter : IColumnNameFormatter + { + public string Format(string name) + { + return name.ToLower(); + } + } + +} diff --git a/src/Dapper.Contrib/SqlMapperExtensions.Async.cs b/src/Dapper.Contrib/SqlMapperExtensions.Async.cs index c93e39a4..ff0bf0f8 100644 --- a/src/Dapper.Contrib/SqlMapperExtensions.Async.cs +++ b/src/Dapper.Contrib/SqlMapperExtensions.Async.cs @@ -137,7 +137,7 @@ private static async Task> GetAllAsyncImpl(IDbConnection conne /// The specific ISqlAdapter to use, auto-detected based on connection if null /// Identity of inserted entity public static Task InsertAsync(this IDbConnection connection, T entityToInsert, IDbTransaction transaction = null, - int? commandTimeout = null, ISqlAdapter sqlAdapter = null) where T : class + int? commandTimeout = null, ISqlAdapter sqlAdapter = null, IColumnNameFormatter columnNameFormatter = null) where T : class { var type = typeof(T); sqlAdapter ??= GetFormatter(connection); @@ -172,7 +172,7 @@ public static Task InsertAsync(this IDbConnection connection, T entityTo for (var i = 0; i < allPropertiesExceptKeyAndComputed.Count; i++) { var property = allPropertiesExceptKeyAndComputed[i]; - sqlAdapter.AppendColumnName(sbColumnList, property.Name); + sqlAdapter.AppendColumnName(sbColumnList, columnNameFormatter == null ? property.Name : columnNameFormatter.Format(property.Name)); if (i < allPropertiesExceptKeyAndComputed.Count - 1) sbColumnList.Append(", "); } diff --git a/src/Dapper.Contrib/SqlMapperExtensions.cs b/src/Dapper.Contrib/SqlMapperExtensions.cs index 9a30e805..f7dad407 100644 --- a/src/Dapper.Contrib/SqlMapperExtensions.cs +++ b/src/Dapper.Contrib/SqlMapperExtensions.cs @@ -317,7 +317,7 @@ private static string GetTableName(Type type) /// The transaction to run under, null (the default) if none /// Number of seconds before command execution timeout /// Identity of inserted entity, or number of inserted rows if inserting a list - public static long Insert(this IDbConnection connection, T entityToInsert, IDbTransaction transaction = null, int? commandTimeout = null) where T : class + public static long Insert(this IDbConnection connection, T entityToInsert, IDbTransaction transaction = null, int? commandTimeout = null, IColumnNameFormatter columnNameFormatter = null) where T : class { var isList = false; @@ -354,7 +354,7 @@ public static long Insert(this IDbConnection connection, T entityToInsert, ID for (var i = 0; i < allPropertiesExceptKeyAndComputed.Count; i++) { var property = allPropertiesExceptKeyAndComputed[i]; - adapter.AppendColumnName(sbColumnList, property.Name); //fix for issue #336 + adapter.AppendColumnName(sbColumnList, columnNameFormatter == null ? property.Name : columnNameFormatter.Format(property.Name)); //fix for issue #336 if (i < allPropertiesExceptKeyAndComputed.Count - 1) sbColumnList.Append(", "); }