private static MemberSetupInfo BuildSetupInfo(int dataColIndex, Type dataFieldType, MemberInfo memberInfo) { var info = new MemberSetupInfo { Index = dataColIndex }; var propInfo = memberInfo as PropertyInfo; if (propInfo != null) { var propertyType = propInfo.PropertyType; var underlyingType = ReflectionUtils.GetUnderlyingType(propertyType); info.MemberUnderlyingType = underlyingType; info.NeedConvertType = !propertyType.IsAssignableFrom(dataFieldType); info.IsEnum = underlyingType.IsEnum; info.CanBeNull = ReflectionUtils.IsNullable(propertyType); info.Setter = PropertyAccessorGenerator.CreateSetter(propInfo); info.MemberName = propInfo.Name; } else { var fieldInfo = (FieldInfo)memberInfo; var fieldType = fieldInfo.FieldType; var underlyingType = ReflectionUtils.GetUnderlyingType(fieldType); info.MemberUnderlyingType = underlyingType; info.NeedConvertType = !fieldType.IsAssignableFrom(dataFieldType); info.IsEnum = underlyingType.IsEnum; info.CanBeNull = ReflectionUtils.IsNullable(fieldType); info.Setter = FieldAccessorGenerator.CreateSetter(fieldInfo); info.MemberName = fieldInfo.Name; } return(info); }
public void AddDbParameterInfo(string paramName, MemberInfo memberInfo) { Func <object, object> valueGetter; Type memberType; // 不是属性就必须是字段,不允许其他情况。 var propertyInfo = memberInfo as PropertyInfo; if (propertyInfo == null) { var fieldInfo = (FieldInfo)memberInfo; valueGetter = FieldAccessorGenerator.CreateGetter(fieldInfo); memberType = fieldInfo.FieldType; } else { valueGetter = PropertyAccessorGenerator.CreateGetter(propertyInfo); memberType = propertyInfo.PropertyType; } var info = new DbParameterInfo { Name = paramName, Type = memberType, ValueGetter = valueGetter }; _parameterInfos.Add(info); }
public void AddDbParameterInfo(string paramName, MemberInfo memberInfo) { var isPropertyInfo = memberInfo is PropertyInfo; var memberType = isPropertyInfo ? ((PropertyInfo)memberInfo).PropertyType : ((FieldInfo)memberInfo).FieldType; var dbType = DbTypeConvert.LookupDbType(memberType); if (dbType == DbTypeConvert.NotSupporteDbType) { throw new NotSupportedException(string.Format( "The type {0} can not be converted to a DbType.", memberType)); } var info = new DbParameterInfo(); info.Name = paramName; info.DbType = dbType; info.IsString = memberType == typeof(string); info.ValueGetter = isPropertyInfo ? PropertyAccessorGenerator.CreateGetter((PropertyInfo)memberInfo) : FieldAccessorGenerator.CreateGetter((FieldInfo)memberInfo); _parameterInfos.Add(info); }