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 { 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; }