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