Skip to content

Commit 860a86d

Browse files
committed
Fix for mapping private properties on base types
1 parent 6dcd7d0 commit 860a86d

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed

src/NPoco/PocoData.cs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -322,10 +322,7 @@ public Delegate GetFactory(string sql, string connString, int firstColumn, int c
322322
il.Emit(OpCodes.Newobj, dstType.GetConstructor(new Type[] { Nullable.GetUnderlyingType(dstType) }));
323323
}
324324

325-
if (pc.MemberInfo.IsField())
326-
il.Emit(OpCodes.Stfld, (FieldInfo)pc.MemberInfo);
327-
else
328-
il.Emit(OpCodes.Callvirt, ((PropertyInfo)pc.MemberInfo).GetSetMethod(true)); // poco
325+
PushMemberOntoStack(il, pc); //poco
329326
Handled = true;
330327
}
331328
}
@@ -348,10 +345,7 @@ public Delegate GetFactory(string sql, string connString, int firstColumn, int c
348345
// Assign it
349346
il.Emit(OpCodes.Unbox_Any, pc.MemberInfo.GetMemberInfoType()); // poco,poco,value
350347

351-
if (pc.MemberInfo.IsField())
352-
il.Emit(OpCodes.Stfld, (FieldInfo)pc.MemberInfo);
353-
else
354-
il.Emit(OpCodes.Callvirt, ((PropertyInfo)pc.MemberInfo).GetSetMethod(true)); // poco
348+
PushMemberOntoStack(il, pc); //poco
355349
}
356350

357351
if (_emptyNestedObjectNull)
@@ -402,6 +396,14 @@ public Delegate GetFactory(string sql, string connString, int firstColumn, int c
402396
return fac;
403397
}
404398

399+
private static void PushMemberOntoStack(ILGenerator il, PocoColumn pc)
400+
{
401+
if (pc.MemberInfo.IsField())
402+
il.Emit(OpCodes.Stfld, (FieldInfo) pc.MemberInfo);
403+
else
404+
il.Emit(OpCodes.Callvirt, ((PropertyInfo) pc.MemberInfo).GetSetMethodOnDeclaringType());
405+
}
406+
405407
private static void AddConverterToStack(ILGenerator il, Func<object, object> converter)
406408
{
407409
if (converter != null)

src/NPoco/ReflectionUtils.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,5 +67,14 @@ public static void SetMemberInfoValue(this MemberInfo member, object obj, object
6767
else
6868
((PropertyInfo)member).SetValue(obj, value, null);
6969
}
70+
71+
public static MethodInfo GetSetMethodOnDeclaringType(this PropertyInfo propertyInfo)
72+
{
73+
var methodInfo = propertyInfo.GetSetMethod(true);
74+
return methodInfo ?? propertyInfo
75+
.DeclaringType
76+
.GetProperty(propertyInfo.Name)
77+
.GetSetMethod(true);
78+
}
7079
}
7180
}

0 commit comments

Comments
 (0)