diff --git a/Dapper.Rainbow/Database.cs b/Dapper.Rainbow/Database.cs index dc73f8699..b1027fd48 100644 --- a/Dapper.Rainbow/Database.cs +++ b/Dapper.Rainbow/Database.cs @@ -50,11 +50,24 @@ public string TableName /// /// Either DynamicParameters or an anonymous type or concrete type /// - public virtual int? Insert(dynamic data) + public virtual int? Insert(dynamic data, params string[] ignore) { var o = (object)data; List paramNames = GetParamNames(o); - paramNames.Remove("Id"); + + if (ignore.Length > 0) + { + paramNames = new List(); + foreach (var prop in o.GetType().GetProperties(BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.Public)) + { + paramNames.Add(prop.Name); + } + + foreach (var field in ignore) + { + paramNames.Remove(field); + } + } string cols = string.Join(",", paramNames); string cols_params = string.Join(",", paramNames.Select(p => "@" + p)); diff --git a/Dapper.Rainbow/SqlCompactDatabase.cs b/Dapper.Rainbow/SqlCompactDatabase.cs index e04633dd0..884f9641d 100644 --- a/Dapper.Rainbow/SqlCompactDatabase.cs +++ b/Dapper.Rainbow/SqlCompactDatabase.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Data.Common; using System.Linq; +using System.Reflection; namespace Dapper.Rainbow { @@ -19,11 +20,24 @@ public SqlCompactTable(Database database, string likelyTableName) /// /// Either DynamicParameters or an anonymous type or concrete type /// - public override int? Insert(dynamic data) + public override int? Insert(dynamic data, params string[] ignore) { var o = (object)data; List paramNames = GetParamNames(o); - paramNames.Remove("Id"); + + if (ignore.Length > 0) + { + paramNames = new List(); + foreach (var prop in o.GetType().GetProperties(BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.Public)) + { + paramNames.Add(prop.Name); + } + + foreach (var field in ignore) + { + paramNames.Remove(field); + } + } string cols = string.Join(",", paramNames); string cols_params = string.Join(",", paramNames.Select(p => "@" + p));