if(dbType==DbType.Object&&prop.PropertyType==typeof(object))// includes dynamic
if(dbType==DbType.Object&&prop.PropertyType==typeof(object))// includes dynamic
{
{
// look it up from the param value
// look it up from the param value
il.Emit(OpCodes.Ldloc_0);// stack is now [parameters] [[parameters]] [parameter] [parameter] [typed-param]
il.Emit(OpCodes.Ldloc,typedParameterLocal);// stack is now [parameters] [[parameters]] [parameter] [parameter] [typed-param]
il.Emit(callOpCode,prop.GetGetMethod());// stack is [parameters] [[parameters]] [parameter] [parameter] [object-value]
il.Emit(callOpCode,prop.GetGetMethod());// stack is [parameters] [[parameters]] [parameter] [parameter] [object-value]
il.Emit(OpCodes.Call,typeof(SqlMapper).GetMethod(nameof(SqlMapper.GetDbType),BindingFlags.Static|BindingFlags.Public));// stack is now [parameters] [[parameters]] [parameter] [parameter] [db-type]
il.Emit(OpCodes.Call,typeof(SqlMapper).GetMethod(nameof(SqlMapper.GetDbType),BindingFlags.Static|BindingFlags.Public));// stack is now [parameters] [[parameters]] [parameter] [parameter] [db-type]
il.EmitCall(OpCodes.Callvirt,typeof(IDataParameter).GetProperty(nameof(IDataParameter.Direction)).GetSetMethod(),null);// stack is now [parameters] [[parameters]] [parameter]
il.EmitCall(OpCodes.Callvirt,typeof(IDataParameter).GetProperty(nameof(IDataParameter.Direction)).GetSetMethod(),null);// stack is now [parameters] [[parameters]] [parameter]
il.Emit(OpCodes.Dup);// stack is now [parameters] [[parameters]] [parameter] [parameter]
il.Emit(OpCodes.Dup);// stack is now [parameters] [[parameters]] [parameter] [parameter]
il.Emit(OpCodes.Ldloc_0);// stack is now [parameters] [[parameters]] [parameter] [parameter] [typed-param]
il.Emit(OpCodes.Ldloc,typedParameterLocal);// stack is now [parameters] [[parameters]] [parameter] [parameter] [typed-param]
il.Emit(callOpCode,prop.GetGetMethod());// stack is [parameters] [[parameters]] [parameter] [parameter] [typed-value]
il.Emit(callOpCode,prop.GetGetMethod());// stack is [parameters] [[parameters]] [parameter] [parameter] [typed-value]
il.Emit(OpCodes.Dup);// stack is now [parameters] [[parameters]] [parameter] [parameter]
il.Emit(OpCodes.Dup);// stack is now [parameters] [[parameters]] [parameter] [parameter]
il.Emit(OpCodes.Ldloc_1);// stack is now [parameters] [[parameters]] [parameter] [parameter] [size]
il.Emit(OpCodes.Ldloc,sizeLocal);// stack is now [parameters] [[parameters]] [parameter] [parameter] [size]
il.EmitCall(OpCodes.Callvirt,typeof(IDbDataParameter).GetProperty(nameof(IDbDataParameter.Size)).GetSetMethod(),null);// stack is now [parameters] [[parameters]] [parameter]
il.EmitCall(OpCodes.Callvirt,typeof(IDbDataParameter).GetProperty(nameof(IDbDataParameter.Size)).GetSetMethod(),null);// stack is now [parameters] [[parameters]] [parameter]