From 17ecbcb447914521ca08e543a66c1f76a7cc20ed Mon Sep 17 00:00:00 2001 From: Waqas Ahmed Date: Wed, 28 Dec 2022 21:40:01 +0500 Subject: [PATCH 1/2] Handling under score columns properties using Columns Attribute while Insert, Update & Delete Operations --- DapperExtensions/DapperExtensions.csproj | 1 + DapperExtensions/Mapper/ClassMapper.cs | 30 ++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/DapperExtensions/DapperExtensions.csproj b/DapperExtensions/DapperExtensions.csproj index 97685550..5f9a39ea 100644 --- a/DapperExtensions/DapperExtensions.csproj +++ b/DapperExtensions/DapperExtensions.csproj @@ -89,6 +89,7 @@ + diff --git a/DapperExtensions/Mapper/ClassMapper.cs b/DapperExtensions/Mapper/ClassMapper.cs index aabd437e..34ebf51d 100644 --- a/DapperExtensions/Mapper/ClassMapper.cs +++ b/DapperExtensions/Mapper/ClassMapper.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; using System.Globalization; using System.Linq; using System.Linq.Expressions; @@ -114,7 +115,7 @@ protected virtual void AutoMap(Func canMap) { continue; } - + this.MapUnderScoreColumns(); var map = Map(propertyInfo); if (!hasDefinedKey) { @@ -134,7 +135,23 @@ protected virtual void AutoMap(Func canMap) ? PropertyTypeKeyTypeMapping[keyMap.MemberType] : KeyType.Assigned); } - + /// + /// Map Underscore columns i.e. first_name using columns attribute + /// [Column("first_name")] + /// Public FirstName {get;set;} + /// + private void MapUnderScoreColumns() + { + #region //Handling under score columns properties using Columns Attribute while Insert, Update & Delete Operations + foreach (MemberMap mp in this.Properties) + { + ColumnAttribute columnAttribute = mp.MemberInfo.GetCustomAttribute(); + var propertyMap = mp as MemberMap; + if (propertyMap != null && columnAttribute != null) + propertyMap.Column(columnAttribute.Name); + } + #endregion + } protected virtual IReferenceMap ReferenceMap(Expression> expression) { var propertyInfo = ReflectionHelper.GetProperty(expression) as PropertyInfo; @@ -173,6 +190,7 @@ protected virtual MemberMap Map(Expression> expression) protected virtual MemberMap Map(PropertyInfo propertyInfo, MemberMap parent = null) { var result = new MemberMap(propertyInfo, this, parent: parent); + if (GuardForDuplicatePropertyMap(result)) { result = (MemberMap)Properties.FirstOrDefault(p => p.Name.Equals(result.Name) && p.ParentProperty == result.ParentProperty); @@ -181,6 +199,14 @@ protected virtual MemberMap Map(PropertyInfo propertyInfo, MemberMap parent = nu { Properties.Add(result); } + + //foreach (MemberMap mp in this.Properties) + //{ + // System.ComponentModel.DataAnnotations.Schema.ColumnAttribute columnAttribute = mp.MemberInfo.GetCustomAttribute(); + // var propertyMap = mp as MemberMap; + // if (propertyMap != null && columnAttribute != null) + // propertyMap.Column(columnAttribute.Name); + //} return result; } From 2b0d53ddce2b63305fb48c53ded5b93d957ba246 Mon Sep 17 00:00:00 2001 From: Waqas Ahmed Date: Wed, 28 Dec 2022 22:00:40 +0500 Subject: [PATCH 2/2] Added unit test ValidateUnderScoreProperties --- .../DapperExtensions.Test.csproj | 1 + .../Mapper/ClassMapperFixture.cs | 23 ++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/DapperExtensions.Test/DapperExtensions.Test.csproj b/DapperExtensions.Test/DapperExtensions.Test.csproj index 7901e8a9..c8347c83 100644 --- a/DapperExtensions.Test/DapperExtensions.Test.csproj +++ b/DapperExtensions.Test/DapperExtensions.Test.csproj @@ -39,6 +39,7 @@ + diff --git a/DapperExtensions.Test/Mapper/ClassMapperFixture.cs b/DapperExtensions.Test/Mapper/ClassMapperFixture.cs index a4f6e4fa..66ac4f77 100644 --- a/DapperExtensions.Test/Mapper/ClassMapperFixture.cs +++ b/DapperExtensions.Test/Mapper/ClassMapperFixture.cs @@ -4,6 +4,7 @@ using NUnit.Framework; using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Linq.Expressions; @@ -319,6 +320,19 @@ public void DoesNotMapPropertyWhenCanMapIsFalse() } } + [TestFixture] + public class UnderscoreColumnsTest: ClassMapperFixtureBase + { + [Test] + public void ValidateUnderScoreProperties() + { + var mapper = new TestMapper(); + mapper.TestProtected().RunMethod("AutoMap"); + Assert.AreEqual(3, mapper.Properties.Count); + } + + } + [TestFixture] public class ReferenceMapTests : ClassMapperFixtureBase { @@ -398,7 +412,14 @@ public class Bar public long BarId { get; set; } public string Name { get; set; } } - + [ExcludeFromCodeCoverage] + public class FooUnderscore + { + public long FooId { get; set; } + [Column("first_name")] + public string FirstName { get; set; } + public string LastName { get; set; } + } [ExcludeFromCodeCoverage] public class TestMapper : ClassMapper where T : class {