Пример #1
0
        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);
        }
Пример #2
0
        /// <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);
        }