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));
}
}
}
}
}
}