예제 #1
0
        public static Type GetObjectKeyType(this XPObjectSpace objectSpace,
                                            Type objectType)
        {
            Type result      = null;
            var  xpClassInfo = objectSpace.FindXPClassInfo(objectType);

            if (xpClassInfo != null)
            {
                Type queryableType = xpClassInfo.ClassType;
                if (queryableType.IsInterface)
                {
                    queryableType = PersistentInterfaceHelper.GetPersistentInterfaceDataType(queryableType);
                    xpClassInfo   = objectSpace.Session.GetClassInfo(queryableType);
                }
                XPMemberInfo keyMember = xpClassInfo.KeyProperty;
                if (keyMember != null)
                {
                    if (!keyMember.IsStruct)
                    {
                        if (keyMember.ReferenceType != null)
                        {
                            result = objectSpace.GetObjectKeyType(keyMember.ReferenceType.ClassType);
                        }
                        else
                        {
                            return(keyMember.MemberType);
                        }
                    }
                    else
                    {
                        throw new NotImplementedException();
                    }
                }
            }
            return(result);
        }