Exemple #1
0
        private void AsCql(
            Action <EntitySet, IList <MemberPath> > createRef,
            Action <IList <MemberPath> > createType,
            MemberPath outputMember)
        {
            EntitySet scopeOfRelationEnd = outputMember.GetScopeOfRelationEnd();

            if (scopeOfRelationEnd != null)
            {
                List <MemberPath> memberPathList = new List <MemberPath>(scopeOfRelationEnd.ElementType.KeyMembers.Select <EdmMember, MemberPath>((Func <EdmMember, MemberPath>)(km => new MemberPath(outputMember, km))));
                createRef(scopeOfRelationEnd, (IList <MemberPath>)memberPathList);
            }
            else
            {
                List <MemberPath> memberPathList = new List <MemberPath>();
                foreach (EdmMember structuralMember in (IEnumerable)Helper.GetAllStructuralMembers(this.m_edmType))
                {
                    memberPathList.Add(new MemberPath(outputMember, structuralMember));
                }
                createType((IList <MemberPath>)memberPathList);
            }
        }
        /// <summary>
        ///     Given the <paramref name="outputMember" /> in the output extent view, generates a constructor expression for
        ///     <paramref name="outputMember" />'s type, i.e, an expression of the form "Type(....)"
        ///     If <paramref name="outputMember" /> is an association end then instead of constructing an Entity or Complex type, constructs a reference.
        /// </summary>
        private void AsCql(Action <EntitySet, IList <MemberPath> > createRef, Action <IList <MemberPath> > createType, MemberPath outputMember)
        {
            var refScopeEntitySet = outputMember.GetScopeOfRelationEnd();

            if (refScopeEntitySet != null)
            {
                // Construct a scoped reference: CreateRef(CPerson1Set, NewRow(pid1, pid2), CPerson1)
                var entityType           = refScopeEntitySet.ElementType;
                var keyMemberOutputPaths = new List <MemberPath>(entityType.KeyMembers.Select(km => new MemberPath(outputMember, km)));
                createRef(refScopeEntitySet, keyMemberOutputPaths);
            }
            else
            {
                // Construct an entity/complex/Association type in the Members order for fields: CPerson(CPerson1_Pid, CPerson1_Name)
                Debug.Assert(m_edmType is StructuralType, "m_edmType must be a structural type.");
                var memberOutputPaths = new List <MemberPath>();
                foreach (EdmMember structuralMember in Helper.GetAllStructuralMembers(m_edmType))
                {
                    memberOutputPaths.Add(new MemberPath(outputMember, structuralMember));
                }
                createType(memberOutputPaths);
            }
        }