Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
            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);
            }
Exemplo n.º 3
0
            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);
            }