diff --git a/DynamORM/Mapper/DynamicPropertyInvoker.cs b/DynamORM/Mapper/DynamicPropertyInvoker.cs index 328f342..9f5eb59 100644 --- a/DynamORM/Mapper/DynamicPropertyInvoker.cs +++ b/DynamORM/Mapper/DynamicPropertyInvoker.cs @@ -123,18 +123,21 @@ namespace DynamORM.Mapper private Func CreateGetter(PropertyInfo property) { - if (property == null || !property.CanRead) - return null; - - var objParm = Expression.Parameter(typeof(object), "o"); - - return Expression.Lambda>( - Expression.Convert( - Expression.Property( - Expression.TypeAs(objParm, property.DeclaringType), - property.Name), - typeof(object)), objParm).Compile(); - } + if (property == null || !property.CanRead) + return null; + + var objParm = Expression.Parameter(typeof(object), "o"); + var target = property.DeclaringType.IsValueType + ? (Expression)Expression.Convert(objParm, property.DeclaringType) + : Expression.TypeAs(objParm, property.DeclaringType); + + return Expression.Lambda>( + Expression.Convert( + Expression.Property( + target, + property.Name), + typeof(object)), objParm).Compile(); + } private Action CreateSetter(PropertyInfo property) { @@ -276,4 +279,4 @@ namespace DynamORM.Mapper #endregion Type command cache } -} \ No newline at end of file +}