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));