/// <summary> /// 获取数据库成员信息 /// </summary> /// <param name="member">成员信息</param> /// <returns>数据库成员信息</returns> internal static TmphDataMember Get(TmphMemberIndex member) { var value = member.GetAttribute<TmphDataMember>(true, false); if (value == null || value.DataType == null) { if (member.Type.IsEnum) { if (value == null) value = new TmphDataMember(); value.DataType = Enum.GetUnderlyingType(member.Type); } else { var sqlMember = TmphTypeAttribute.GetAttribute<TmphDataMember>(member.Type, false, false); if (sqlMember != null && sqlMember.DataType != null) { if (value == null) value = new TmphDataMember(); value.DataType = sqlMember.DataType; if (sqlMember.DataType.nullableType() != null) value.IsNull = true; } } } else if (member.Type.IsEnum) { var TEnumType = Enum.GetUnderlyingType(member.Type); if (TEnumType != value.DataType) value.TEnumType = TEnumType; } if (value == null) { var nullableType = member.Type.nullableType(); if (nullableType == null) { if (TmphTypeAttribute.GetAttribute<TmphSqlColumn>(member.Type, false, false) == null) { var dataType = member.Type.formCSharpType().toCSharpType(); if (dataType != member.Type) { value = new TmphDataMember(); value.DataType = dataType; } } } else { value = new TmphDataMember(); value.IsNull = true; var dataType = nullableType.formCSharpType().toCSharpType(); if (dataType != nullableType) value.DataType = dataType.toNullableType(); } } return value ?? NullDataMember; }
/// <summary> /// 字段信息 /// </summary> /// <param name="field"></param> /// <param name="attribute"></param> public TmphFieldInfo(TmphFieldIndex field, TmphDataMember attribute) { Field = field.Member; DataMember = attribute; MemberMapIndex = field.MemberIndex; }
/// <summary> /// 格式化数据库成员信息 /// </summary> /// <param name="value"></param> /// <param name="type"></param> /// <returns></returns> internal static TmphDataMember FormatSql(TmphDataMember value, Type type, ref bool isSqlColumn) { if (type.IsEnum) { var TEnumType = Enum.GetUnderlyingType(type); if (value == null) return new TmphDataMember { DataType = Enum.GetUnderlyingType(type) }; if (value.DataType == null) value.DataType = Enum.GetUnderlyingType(type); else if (TEnumType != value.DataType) value.TEnumType = TEnumType; return value; } Type nullableType = null; if (type.IsGenericType) { var genericType = type.GetGenericTypeDefinition(); if (genericType == typeof(TmphJsonMember<>)) { if (value == null) return new TmphDataMember { DataType = typeof(string) }; value.DataType = typeof(string); return value; } if (genericType == typeof(TmphFileBlockMember<>)) { if (value == null) return new TmphDataMember { DataType = typeof(TmphFileBlockStream.TmphIndex) }; value.DataType = typeof(TmphFileBlockStream.TmphIndex); return value; } if (genericType == typeof(Nullable<>)) nullableType = type.GetGenericArguments()[0]; } else if (TmphTypeAttribute.GetAttribute<TmphSqlColumn>(type, false, false) != null) { isSqlColumn = true; return NullDataMember; } if (value == null || value.DataType == null) { var sqlMember = TmphTypeAttribute.GetAttribute<TmphDataMember>(type, false, false); if (sqlMember != null && sqlMember.DataType != null) { if (value == null) value = new TmphDataMember(); value.DataType = sqlMember.DataType; if (sqlMember.DataType.IsValueType && sqlMember.DataType.IsGenericType && sqlMember.DataType.GetGenericTypeDefinition() == typeof(Nullable<>)) value.IsNull = true; } } if (value == null) { if (nullableType == null) { var dataType = type.formCSharpType().toCSharpType(); if (dataType != type) value = new TmphDataMember { DataType = dataType }; } else { value = new TmphDataMember { IsNull = true }; var dataType = nullableType.formCSharpType().toCSharpType(); if (dataType != nullableType) value.DataType = dataType.toNullableType(); } } return value ?? NullDataMember; }