diff --git a/src/SQLite.cs b/src/SQLite.cs index ee172b39..8a3d0a46 100644 --- a/src/SQLite.cs +++ b/src/SQLite.cs @@ -2469,7 +2469,7 @@ public TableMapping (Type type, CreateFlags createFlags = CreateFlags.None) var cols = new List(members.Count); foreach(var m in members) { - var ignore = m.IsDefined(typeof(IgnoreAttribute), true); + var ignore = IsIgnored(type, m); if(!ignore) cols.Add(new Column(m, createFlags)); } @@ -2496,6 +2496,29 @@ public TableMapping (Type type, CreateFlags createFlags = CreateFlags.None) _insertColumns = Columns.Where (c => !c.IsAutoInc).ToArray (); _insertOrReplaceColumns = Columns.ToArray (); } + + private bool IsIgnored(Type declaringType, MemberInfo m) + { + var attributes = m.GetCustomAttributes(typeof(IgnoreAttribute), true); + if (attributes.Any(x => x is IgnoreAttribute)) + return true; + + if (declaringType.BaseType == null) + return false; + + var newDeclaringType = declaringType; + var newMember = m; + do + { + newDeclaringType = newDeclaringType.BaseType; + if (newDeclaringType == null) + return false; + newMember = newDeclaringType.GetMember(m.Name).FirstOrDefault(); + + } while (newMember == null); + + return IsIgnored(newDeclaringType, newMember); + } private IReadOnlyCollection GetPublicMembers(Type type) {