DatabaseManager.FieldViewModel.LoadChildren C# (CSharp) Method

LoadChildren() protected method

protected LoadChildren ( ) : void
return void
    protected override void LoadChildren()
    {
      IOptimizedPersistable parentObj = (IOptimizedPersistable) m_session.Open(m_parentId, false, null, false, 0, Int32.MaxValue);
      if (parentObj != null)
      {
        object memberObj = m_member.GetMemberValue(parentObj.WrappedObject);
        Array a = memberObj as Array;
        if (a != null)
        {
          Type elementType = a.GetType().GetElementType();
          TypeCode tCode = elementType.GetTypeCode();
          bool isValueType = elementType.GetTypeInfo().IsValueType;
          if ((isValueType || elementType.IsArray) && !m_isEncodedOidArray)
            base.Children.Add(new ArrayViewModelNoExpansions(a, this, m_isEncodedOidArray, parentObj.Page, m_session));
          else
          {
            int i = 0;
            foreach (object arrayObj in a)
            {
              if (arrayObj != null)
                base.Children.Add(new ObjectViewModel(arrayObj, this, i++, m_isEncodedOidArray, m_session));
            }
          }
        }
        else
        {
          IOptimizedPersistable p = memberObj as IOptimizedPersistable;
          if (p != null)
            base.Children.Add(new ObjectViewModel(p, this, m_session));
          else if (m_member.WeakIOptimizedPersistableReference)
          {
            WeakIOptimizedPersistableReferenceBase weakRef = memberObj as VelocityDb.WeakIOptimizedPersistableReferenceBase;
            p = m_session.Open(weakRef.Id, false, null, false, 0, Int32.MaxValue);
            base.Children.Add(new ObjectViewModel(p, this, m_session));
          }
          else
          {
            IList list = memberObj as IList;
            Type elementType = list.GetType();
            if (elementType.IsGenericType)
              elementType = elementType.GetGenericArguments()[0];
            else
              elementType = elementType.GetElementType();
            TypeCode tCode = elementType.GetTypeCode();
            bool isValueType = elementType.GetTypeInfo().IsValueType;
            if ((isValueType || elementType.IsArray) && !m_isEncodedOidArray)
              base.Children.Add(new ListViewModel(list, this, parentObj.Page));
            else
            {
              int i = 0;
              foreach (object arrayObj in list)
              {
                base.Children.Add(new ObjectViewModel(arrayObj, this, i++, m_isEncodedOidArray, m_session));
              }
            }
          }
        }
      }
    }