diff --git a/DapperExtensions.Test/IntegrationTests/Async/SqlServer/CrudFixture.cs b/DapperExtensions.Test/IntegrationTests/Async/SqlServer/CrudFixture.cs index 77d80dde..1d72f72d 100644 --- a/DapperExtensions.Test/IntegrationTests/Async/SqlServer/CrudFixture.cs +++ b/DapperExtensions.Test/IntegrationTests/Async/SqlServer/CrudFixture.cs @@ -13,6 +13,17 @@ namespace DapperExtensions.Test.IntegrationTests.Async.SqlServer [Parallelizable(ParallelScope.Self)] public static class CrudFixture { + [TestFixture] + public class InsertAsyncList : SqlServerBaseAsyncFixture + { + [Test] + public void InsertAsyncListWithIgnore() + { + var f = new Foo { FirstName = "Test", LastName = "Person", DateOfBirth = DateTime.Today, BarList = new List() { new Bar { Name = "BarTest" } } }; + _ = Db.Insert(f).Result; + } + } + [TestFixture] public class InsertMethod : SqlServerBaseAsyncFixture { diff --git a/DapperExtensions/DapperImplementor.cs b/DapperExtensions/DapperImplementor.cs index cf4e1933..68d24e7e 100644 --- a/DapperExtensions/DapperImplementor.cs +++ b/DapperExtensions/DapperImplementor.cs @@ -557,12 +557,16 @@ public DynamicParameters GetDynamicParameters(IClassMapper classMap, T entity return GetDynamicParameters(entity, classMap, sequenceIdentityColumn, foreignKeys, ignored, useColumnAlias); } - public DynamicParameters GetDynamicParameters(T entity, DynamicParameters dynamicParameters, IMemberMap keyColumn, bool useColumnAlias = false) + public DynamicParameters GetDynamicParameters(IClassMapper classMap, T entity, IMemberMap keyColumn, bool useColumnAlias = false) { - dynamicParameters ??= new DynamicParameters(); - foreach (var prop in entity.GetType().GetProperties(BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.Public) - .Where(p => p.Name != keyColumn.Name)) - AddParameter(entity, dynamicParameters, new MemberMap(prop), useColumnAlias); + var ignored = classMap.Properties.Where(x => x.Ignored).Select(p => p.MemberInfo).ToList(); + + var dynamicParameters = new DynamicParameters(); + + foreach (var prop in entity.GetType().GetProperties(BindingFlags.GetProperty | BindingFlags.GetField | BindingFlags.Instance | BindingFlags.Public) + .Where(p => p.Name != keyColumn.Name && !ignored.Contains(p) + )) + dynamicParameters = AddParameter(entity, dynamicParameters, new MemberMap(prop), useColumnAlias); return dynamicParameters; } @@ -695,7 +699,7 @@ protected dynamic InternalInsert(IDbConnection connection, T entity, IDbTrans var keyColumn = triggerIdentityColumn ?? identityColumn; object keyValue; - dynamicParameters = GetDynamicParameters(entity, dynamicParameters, keyColumn, true); + dynamicParameters = GetDynamicParameters(classMap, entity, keyColumn, true); if (triggerIdentityColumn != null) {