/// <summary> /// 根据冗余路径从当前对象开始搜索,获取真实的属性值。 /// </summary> /// <param name="path"></param> /// <param name="from"> /// 本对象在路径中拥有的引用属性。 /// 在 D->C->B->A.Name 场景中,当前对象(this)可能是 C,那么 from 就是 C.BRefProperty. /// 如果没有指定此属性,则表示从第一个开始。 /// </param> /// <returns></returns> internal object GetRedundancyValue(RedundantPath path, IRefIdProperty from = null) { Entity refEntity = this; foreach (var refP in path.RefPathes) { if (from != null && refP.Property != from) { continue; } refEntity = refEntity.GetRefEntity((refP.Property as IRefProperty).RefEntityProperty); if (refEntity == null) { break; } } object value = null; if (refEntity != this && refEntity != null) { value = refEntity.GetProperty(path.ValueProperty.Property); } return(value); }
private static object GetRootId(Entity entity) { var parentPropertyMeta = entity.GetRepository().EntityMeta.FindParentReferenceProperty(); if (parentPropertyMeta == null) { return(entity.Id); } var refMP = parentPropertyMeta.ManagedProperty.CastTo <IRefEntityProperty>(); var parent = entity.GetRefEntity(refMP); return(GetRootId(parent)); }
private void DeepSearchRecur_Instance(Entity entity) { var values = entity.GetNonDefaultPropertyValues(); foreach (var value in values) { var mp = value.Property as IProperty; switch (mp.Category) { case PropertyCategory.ReferenceEntity: if (mp.GetMeta(entity).Serializable) { var refEntity = entity.GetRefEntity(mp as IRefEntityProperty); AddEntityType(refEntity.GetType()); DeepSearchRecur_Instance(refEntity); } break; case PropertyCategory.List: if (mp.GetMeta(entity).Serializable) { var list = entity.GetLazyList(mp as IListProperty); for (int i = 0, c = list.Count; i < c; i++) { var child = list[i]; if (i == 0) { AddEntityType(child.GetType()); } DeepSearchRecur_Instance(child); } } break; default: break; } } }