public static void FetchSet(object objEntity, SETAttribute setAtt, DataTable table) { ArrayList list = new ArrayList(); for (int i = 0; i < table.Rows.Count; i++) { //如果该实体的此集合属性为空 if (table.Rows[i][setAtt.ElementEntityId] == DBNull.Value) { continue; } if (((BaseEntity)objEntity).Id == Convert.ToInt64(table.Rows[i][setAtt.ElementEntityId])) { object objElement = DLLAnalysis.GetEntityInstance(setAtt.ElementEntityName); if (Convert.IsDBNull(table.Rows[i]["E_" + setAtt.ElementEntityName + "Id"])) { continue; } ((BaseEntity)objElement).Id = Convert.ToInt64(table.Rows[i]["E_" + setAtt.ElementEntityName + "Id"]); EntityInfo elementEinfo = DLLAnalysis.GetEntityInfoByType(objElement.GetType()); foreach (FieldAttribute fieldAtt in elementEinfo.Properties) { FetchPropertyValue(objElement, fieldAtt, table, i); } foreach (REFAttribute refAtt in elementEinfo.References) { if (refAtt.REFEntityName.Equals(objEntity.GetType().Name)) { objElement.GetType().GetProperty(refAtt.PropertyName).SetValue(objElement, objEntity, null); } } list.Add(objElement); } } objEntity.GetType().GetProperty(setAtt.PropertyName).SetValue(objEntity, list, null); }
/// <summary> /// 根据实体的Type获得实体的类媒数据信息 /// </summary> /// <param name="type">实体类的Type</param> /// <returns>实体的媒数据信息</returns> public static EntityInfo GetEntityInfoByType(Type type) { if (!type.IsSubclassOf(typeof(BaseEntity))) { return(null); } EntityInfo ei = new EntityInfo(); ei.EntityName = type.Name;//获得实体的名称 object[] atts = type.GetCustomAttributes(typeof(EntityAttribute), false); if (atts != null && atts.Length > 0) { ei.EntityDisplayName = ((EntityAttribute)atts[0]).EntityDisplayName;//获得实体的显示名称 } PropertyInfo[] properties = type.GetProperties(); List <FieldAttribute> pros = new List <FieldAttribute>(); List <REFAttribute> refs = new List <REFAttribute>(); List <SETAttribute> sets = new List <SETAttribute>(); foreach (PropertyInfo pi in properties) { object[] patts = pi.GetCustomAttributes(false); if (patts != null && patts.Length > 0) { object objAtt = patts[0]; if (objAtt is FieldAttribute) { ((FieldAttribute)objAtt).FieldName = pi.Name; pros.Add((FieldAttribute)objAtt); } else if (objAtt is REFAttribute) { REFAttribute refAtt = (REFAttribute)objAtt; refAtt.EntityName = ei.EntityName; refAtt.PropertyName = pi.Name; refAtt.REFFieldName = refAtt.REFEntityName + "Id"; refs.Add(refAtt); } else if (objAtt is SETAttribute) { SETAttribute setAtt = (SETAttribute)objAtt; setAtt.EntityName = ei.EntityName; setAtt.PropertyName = pi.Name; if (setAtt.IsMidTable) { setAtt.MidTableName = type.Name + "_" + setAtt.ElementEntityName; setAtt.OwnerFieldName = type.Name + "Id"; setAtt.ElementEntityId = setAtt.ElementEntityName + "Id"; } else { setAtt.ElementEntityId = ei.EntityName + "Id"; } sets.Add(setAtt); } //如果有引用自生的属性,则将REFSelf置为true; else if (objAtt is REFSelfAttribute) { ei.REFSelf = true; } } } ei.Properties = pros; ei.References = refs; ei.Sets = sets; return(ei); }