/// <summary> /// 设置扩展属性:字段是否可为NULL(CanbeNull) /// </summary> /// <param name="ext"></param> /// <param name="pd"></param> /// <param name="dbtype"></param> internal static void SetExtendProperty_CanbeNull(IExtendProperty ext, PropertyDescriptor pd) { if (pd.PropertyType.IsNullableType()) { ext.SetExtendPropertyValue("CanbeNull", true); } else { switch (pd.PropertyType.GetTypeIfIsNullable().GetDbType()) { case DbType.String: case DbType.Object: { MustInputAttribute a = pd.Attributes[typeof(MustInputAttribute)] as MustInputAttribute; if (a != null) { ext.SetExtendPropertyValue("CanbeNull", false); } else { ext.SetExtendPropertyValue("CanbeNull", true); } break; } default: { ext.SetExtendPropertyValue("CanbeNull", false); break; } } } }
/// <summary> /// 设置扩展属性:字段最大数据长度(MaxLength) /// </summary> /// <param name="ext"></param> /// <param name="pd"></param> internal static void SetExtendProperty_MaxLength(IExtendProperty ext, PropertyDescriptor pd, int?defaultvalue) { MaxValueLengthAttribute a = pd.Attributes[typeof(MaxValueLengthAttribute)] as MaxValueLengthAttribute; if (a != null) { ext.SetExtendPropertyValue("MaxLength", a.MaxValue); } else { if (defaultvalue != null && defaultvalue.HasValue) { ext.SetExtendPropertyValue("MaxLength", defaultvalue.Value); } } }
/// <summary> /// 设置扩展属性:数字类型字段值的最大和最小限制表达式(MinMaxExpress) /// </summary> /// <param name="ext"></param> /// <param name="pd"></param> internal static void SetExtendProperty_MinMaxExpress(IExtendProperty ext, PropertyDescriptor pd) { MinMaxValueAttribute a = pd.Attributes[typeof(MinMaxValueAttribute)] as MinMaxValueAttribute; if (a != null) { ext.SetExtendPropertyValue("MinMaxExpress", a.ValueExpress); } }
/// <summary> /// 设置扩展属性:是否是行版本字段(IsRowVersion) /// </summary> /// <param name="ext"></param> /// <param name="pd"></param> internal static void SetExtendProerty_RowVersion(IExtendProperty ext, PropertyDescriptor pd) { RowVersionAttribute a = pd.Attributes[typeof(RowVersionAttribute)] as RowVersionAttribute; if (a != null) { ext.SetExtendPropertyValue("IsRowVersion", true); } }
/// <summary> /// 设置扩展属性:是否是软删除字段(IsSoftDeleteField) /// </summary> /// <param name="ext"></param> /// <param name="pd"></param> internal static void SetExtendProerty_IsSoftDeleteField(IExtendProperty ext, PropertyDescriptor pd) { SoftDeleteFieldAttribute a = pd.Attributes[typeof(SoftDeleteFieldAttribute)] as SoftDeleteFieldAttribute; if (a != null && a.IsSoftDelete) { ext.SetExtendPropertyValue("IsSoftDeleteField", true); } }
/// <summary> /// 设置扩展属性:字段缺省值(DefaultValue) /// </summary> /// <param name="ext"></param> /// <param name="pd"></param> internal static void SetExtendProperty_DefaultValue(IExtendProperty ext, PropertyDescriptor pd) { DefaultValueAttribute a = pd.Attributes[typeof(DefaultValueAttribute)] as DefaultValueAttribute; if (a != null && !string.IsNullOrEmpty(a.DefaultValue)) { ext.SetExtendPropertyValue("DefaultValue", a.DefaultValue); } }
/// <summary> /// 设置扩展属性:数据库字段值转换接口的类型(DbFieldValueConvertType) /// </summary> /// <param name="ext"></param> /// <param name="pd"></param> internal static void SetExtendProerty_DbFieldValueConvertType(IExtendProperty ext, PropertyDescriptor pd) { DbFieldValueConvertAttribute a = pd.Attributes[typeof(DbFieldValueConvertAttribute)] as DbFieldValueConvertAttribute; if (a != null && a.TypeValue != null && a.TypeValue.FindInterface(typeof(IDbValueConvertor))) { ext.SetExtendPropertyValue("DbFieldValueConvertType", a.TypeValue); } }
/// <summary> /// 设置扩展属性:Decimal类型的字段精度定义(DecimalDefine) /// </summary> /// <param name="ext"></param> /// <param name="pd"></param> internal static void SetExtendProperty_DecimalDefine(IExtendProperty ext, PropertyDescriptor pd, DecimalDefine defaultvalue) { DecimalDbDescriptionAttribute a = pd.Attributes[typeof(DecimalDbDescriptionAttribute)] as DecimalDbDescriptionAttribute; if (a != null) { DecimalDefine d = new DecimalDefine() { DecimalLength = a.DecimalLength, DotLength = a.DotLength }; ext.SetExtendPropertyValue("DecimalDefine", d); } else { if (defaultvalue != null) { ext.SetExtendPropertyValue("DecimalDefine", defaultvalue); } } }
/// <summary> /// 设置扩展属性:数据库字段的自动增加属性(DbGeneratedDefine) /// </summary> /// <param name="ext"></param> /// <param name="pd"></param> internal static void SetExtendProperty_DbGeneratedDefine(IExtendProperty ext, PropertyDescriptor pd) { DbGeneratedAttribute a = pd.Attributes[typeof(DbGeneratedAttribute)] as DbGeneratedAttribute; if (a != null) { DbGeneratedDefine d = new DbGeneratedDefine() { StartValue = a.StartValue, Step = a.Step }; ext.SetExtendPropertyValue("DbGeneratedDefine", d); } }
/// <summary> /// 设置扩展属性:字段是否主键(PrimaryKey) /// </summary> /// <param name="ext"></param> /// <param name="pd"></param> internal static void SetExtendProperty_PrimaryKey(IExtendProperty ext, PropertyDescriptor pd) { PrimaryKeyAttribute a = pd.Attributes[typeof(PrimaryKeyAttribute)] as PrimaryKeyAttribute; if (a != null && a.IsPrimaryKey) { DataModelFieldIndex d = new DataModelFieldIndex() { Name = pd.GetNameForDatabase(), Order = a.Order }; ext.SetExtendPropertyValue("PrimaryKey", d); } }
/// <summary> /// 设置扩展属性:字段集合(Fields,PrimaryKeys,IndexKey,SoftDeleteFieldName) /// </summary> /// <param name="ext"></param> /// <param name="type"></param> internal static void SetExtendProperty_Fields(IExtendProperty ext, Type type) { //自定义字段筛选特性 DataModelFieldCustomFilterAttribute a = null; if (Attribute.IsDefined(type, typeof(DataModelFieldCustomFilterAttribute), true)) { a = type.GetCustomAttributes(typeof(DataModelFieldCustomFilterAttribute), true)[0] as DataModelFieldCustomFilterAttribute; } List <IDataModelFieldIndex> primk = new List <IDataModelFieldIndex>(); List <IDataModelFieldIndex> indexk = new List <IDataModelFieldIndex>(); DataFieldModelCollection fields = new DataFieldModelCollection(); PropertyDescriptorCollection pdcols = TypeDescriptor.GetProperties(type); string softDeleteFieldName = null; foreach (PropertyDescriptor p in pdcols) { if (FieldIsDefineOnDb(p, a)) { IDataFieldModel field = new PropertyDescriptorDataModelField(p); fields.Add(field); var pk = field.IsPrimaryKey(); if (pk != null) { primk.Add(pk); } var ink = field.IsIndexKey(); if (ink != null) { indexk.Add(ink); } if (field.IsSoftDeleteField()) { if (!string.IsNullOrEmpty(softDeleteFieldName)) { throw new DataModelException(string.Format(LocalResource.DataModelException_ExtSFD, softDeleteFieldName, field.Name)); } softDeleteFieldName = field.Name; ext.SetExtendPropertyValue("SoftDeleteFieldName", softDeleteFieldName); } } } ext.SetExtendPropertyValue("Fields", fields); ext.SetExtendPropertyValue("PrimaryKeys", primk.ToArray()); ext.SetExtendPropertyValue("IndexKeys", indexk.ToArray()); object[] o = type.GetCustomAttributes(typeof(DataIdRefenceAttribute), true); if (o != null) { foreach (object item in o) { DataIdRefenceAttribute da = item as DataIdRefenceAttribute; var sfield = fields.FirstOrDefault(f => string.Equals(f.Name, da.SourceFieldName, StringComparison.OrdinalIgnoreCase)); if (sfield != null) { DataIdRefence df = new DataIdRefence() { RefenceIsParent = da.RefenceIsParent, RefenceModalType = da.RefenceModalType, SourceFieldName = da.SourceFieldName }; SetExtendProerty_DataIdRefence(sfield.InnerExtend, df); } } } }
/// <summary> /// 设置扩展属性:数据引用(DataIdRefence) /// </summary> /// <param name="ext"></param> /// <param name="pd"></param> internal static void SetExtendProerty_DataIdRefence(IExtendProperty ext, IDataIdRefence at) { ext.SetExtendPropertyValue("DataIdRefence", at); }
/// <summary> /// 设置扩展属性:Clr数据类型(ClrType) /// </summary> /// <param name="ext"></param> /// <param name="type"></param> internal static void SetExtendProerty_ClrType(IExtendProperty ext, Type type) { ext.SetExtendPropertyValue("ClrType", type); }
/// <summary> /// 设置扩展属性:属性描述符(PropertyDescriptor) /// </summary> /// <param name="ext"></param> /// <param name="pd"></param> internal static void SetExtendProerty_PropertyDescription(IExtendProperty ext, PropertyDescriptor pd) { ext.SetExtendPropertyValue("PropertyDescriptor", pd); }