public IEdmEntitySet FindNavigationTarget(IEdmNavigationProperty property)
        {
            IEdmEntitySet entitySet;
            CsdlSemanticsNavigationProperty csdlSemanticsNavigationProperty = property as CsdlSemanticsNavigationProperty;

            if (csdlSemanticsNavigationProperty != null)
            {
                IEnumerator <IEdmEntityContainer> enumerator = this.Model.EntityContainers().GetEnumerator();
                using (enumerator)
                {
                    while (enumerator.MoveNext())
                    {
                        CsdlSemanticsEntityContainer current = (CsdlSemanticsEntityContainer)enumerator.Current;
                        IEnumerable <CsdlSemanticsAssociationSet> csdlSemanticsAssociationSets = current.FindAssociationSets(csdlSemanticsNavigationProperty.Association);
                        if (csdlSemanticsAssociationSets == null)
                        {
                            continue;
                        }
                        IEnumerator <CsdlSemanticsAssociationSet> enumerator1 = csdlSemanticsAssociationSets.GetEnumerator();
                        using (enumerator1)
                        {
                            while (enumerator1.MoveNext())
                            {
                                CsdlSemanticsAssociationSet    csdlSemanticsAssociationSet = enumerator1.Current;
                                CsdlSemanticsAssociationSetEnd end1 = csdlSemanticsAssociationSet.End1 as CsdlSemanticsAssociationSetEnd;
                                CsdlSemanticsAssociationSetEnd end2 = csdlSemanticsAssociationSet.End2 as CsdlSemanticsAssociationSetEnd;
                                if (csdlSemanticsAssociationSet.End1.EntitySet != this || csdlSemanticsNavigationProperty.To != csdlSemanticsAssociationSet.End2.Role)
                                {
                                    if (csdlSemanticsAssociationSet.End2.EntitySet != this || csdlSemanticsNavigationProperty.To != csdlSemanticsAssociationSet.End1.Role)
                                    {
                                        continue;
                                    }
                                    this.Model.SetAssociationSetName(csdlSemanticsAssociationSet.End2.EntitySet, property, csdlSemanticsAssociationSet.Name);
                                    if (end1 != null && end2 != null)
                                    {
                                        this.Model.SetAssociationSetAnnotations(end2.EntitySet, property, csdlSemanticsAssociationSet.DirectValueAnnotations, end2.DirectValueAnnotations, end1.DirectValueAnnotations);
                                    }
                                    entitySet = csdlSemanticsAssociationSet.End1.EntitySet;
                                    return(entitySet);
                                }
                                else
                                {
                                    this.Model.SetAssociationSetName(csdlSemanticsAssociationSet.End1.EntitySet, property, csdlSemanticsAssociationSet.Name);
                                    if (end1 != null && end2 != null)
                                    {
                                        this.Model.SetAssociationSetAnnotations(end1.EntitySet, property, csdlSemanticsAssociationSet.DirectValueAnnotations, end1.DirectValueAnnotations, end2.DirectValueAnnotations);
                                    }
                                    entitySet = csdlSemanticsAssociationSet.End2.EntitySet;
                                    return(entitySet);
                                }
                            }
                        }
                    }
                    return(null);
                }
                return(entitySet);
            }
            return(null);
        }
 public SilentPartner(CsdlSemanticsNavigationProperty partner)
 {
     this.typeCache = new Cache <CsdlSemanticsNavigationProperty.SilentPartner, IEdmTypeReference>();
     this.partner   = partner;
     partner.Model.SetAssociationNamespace(this, partner.Association.Namespace);
     partner.Model.SetAssociationName(this, partner.Association.Name);
     partner.Model.SetAssociationEndName(this, partner.To.Name);
 }
示例#3
0
            public SilentPartner(CsdlSemanticsNavigationProperty partner)
            {
                this.partner = partner;

                partner.Model.SetAssociationNamespace(this, partner.Association.Namespace);
                partner.Model.SetAssociationName(this, partner.Association.Name);
                partner.Model.SetAssociationEndName(this, partner.To.Name);
            }
        private IEdmNavigationProperty ComputePartner()
        {
            IEdmNavigationProperty edmNavigationProperty;
            int num = 0;

            foreach (IEdmNavigationProperty edmNavigationProperty1 in this.declaringType.NavigationProperties())
            {
                if (edmNavigationProperty1 == this)
                {
                    break;
                }
                CsdlSemanticsNavigationProperty csdlSemanticsNavigationProperty = edmNavigationProperty1 as CsdlSemanticsNavigationProperty;
                if (csdlSemanticsNavigationProperty == null || csdlSemanticsNavigationProperty.Association != this.Association || csdlSemanticsNavigationProperty.To != this.To)
                {
                    continue;
                }
                num++;
            }
            IEnumerator <IEdmNavigationProperty> enumerator = this.To.EntityType.NavigationProperties().GetEnumerator();

            using (enumerator)
            {
                while (enumerator.MoveNext())
                {
                    IEdmNavigationProperty          current = enumerator.Current;
                    CsdlSemanticsNavigationProperty csdlSemanticsNavigationProperty1 = current as CsdlSemanticsNavigationProperty;
                    if (csdlSemanticsNavigationProperty1 == null)
                    {
                        if (current.Partner != this)
                        {
                            continue;
                        }
                        edmNavigationProperty = current;
                        return(edmNavigationProperty);
                    }
                    else
                    {
                        if (csdlSemanticsNavigationProperty1.Association != this.Association || csdlSemanticsNavigationProperty1.To != this.From)
                        {
                            continue;
                        }
                        if (num != 0)
                        {
                            num--;
                        }
                        else
                        {
                            edmNavigationProperty = current;
                            return(edmNavigationProperty);
                        }
                    }
                }
                return(new CsdlSemanticsNavigationProperty.SilentPartner(this));
            }
            return(edmNavigationProperty);
        }
        private IEdmAssociation ComputeAssociation()
        {
            CsdlSemanticsElement csdlSemanticsElement;
            CsdlSemanticsElement csdlSemanticsElement1;
            IEnumerable <IEdmDirectValueAnnotation> directValueAnnotations;
            IEdmAssociation edmAssociation        = this.declaringType.Context.FindAssociation(this.navigationProperty.Relationship);
            IEdmAssociation unresolvedAssociation = edmAssociation;

            if (edmAssociation == null)
            {
                unresolvedAssociation = new UnresolvedAssociation(this.navigationProperty.Relationship, base.Location);
            }
            IEdmAssociation edmAssociation1 = unresolvedAssociation;

            this.Model.SetAssociationNamespace(this, edmAssociation1.Namespace);
            this.Model.SetAssociationName(this, edmAssociation1.Name);
            CsdlSemanticsAssociation    csdlSemanticsAssociation = edmAssociation1 as CsdlSemanticsAssociation;
            CsdlSemanticsAssociationEnd end1 = edmAssociation1.End1 as CsdlSemanticsAssociationEnd;
            CsdlSemanticsAssociationEnd end2 = edmAssociation1.End2 as CsdlSemanticsAssociationEnd;

            if (csdlSemanticsAssociation != null && end1 != null && end2 != null)
            {
                CsdlSemanticsModel model = this.Model;
                CsdlSemanticsNavigationProperty         csdlSemanticsNavigationProperty = this;
                IEnumerable <IEdmDirectValueAnnotation> edmDirectValueAnnotations       = csdlSemanticsAssociation.DirectValueAnnotations;
                if (this.navigationProperty.FromRole == end1.Name)
                {
                    csdlSemanticsElement = end1;
                }
                else
                {
                    csdlSemanticsElement = end2;
                }
                IEnumerable <IEdmDirectValueAnnotation> directValueAnnotations1 = csdlSemanticsElement.DirectValueAnnotations;
                if (this.navigationProperty.FromRole == end1.Name)
                {
                    csdlSemanticsElement1 = end2;
                }
                else
                {
                    csdlSemanticsElement1 = end1;
                }
                IEnumerable <IEdmDirectValueAnnotation> edmDirectValueAnnotations1 = csdlSemanticsElement1.DirectValueAnnotations;
                if (edmAssociation1.ReferentialConstraint != null)
                {
                    directValueAnnotations = edmAssociation1.ReferentialConstraint.DirectValueAnnotations;
                }
                else
                {
                    directValueAnnotations = Enumerable.Empty <IEdmDirectValueAnnotation>();
                }
                model.SetAssociationAnnotations(csdlSemanticsNavigationProperty, edmDirectValueAnnotations, directValueAnnotations1, edmDirectValueAnnotations1, directValueAnnotations);
            }
            return(edmAssociation1);
        }
示例#6
0
        private IEdmNavigationProperty ComputePartner()
        {
            // If multiple navigation properties share an association, pair the first with the first, second with second and so forth.
            int propertyIndex = 0;

            foreach (IEdmNavigationProperty navigationProperty in this.declaringType.NavigationProperties())
            {
                if (navigationProperty == this)
                {
                    break;
                }

                CsdlSemanticsNavigationProperty csdlNavigationProperty = navigationProperty as CsdlSemanticsNavigationProperty;
                if (csdlNavigationProperty != null)
                {
                    if (csdlNavigationProperty.Association == this.Association && csdlNavigationProperty.To == this.To)
                    {
                        propertyIndex++;
                    }
                }
            }

            foreach (IEdmNavigationProperty candidate in this.To.EntityType.NavigationProperties())
            {
                CsdlSemanticsNavigationProperty csdlCandidate = candidate as CsdlSemanticsNavigationProperty;
                if (csdlCandidate != null)
                {
                    if (csdlCandidate.Association == this.Association && csdlCandidate.To == this.From)
                    {
                        if (propertyIndex == 0)
                        {
                            return(candidate);
                        }
                        else
                        {
                            propertyIndex--;
                        }
                    }
                }
                else if (candidate.Partner == this)
                {
                    return(candidate);
                }
            }

            return(new SilentPartner(this));
        }
示例#7
0
        private IEdmEntitySet FindNavigationTargetHelper(IEdmNavigationProperty property)
        {
            CsdlSemanticsNavigationProperty navigationProperty = property as CsdlSemanticsNavigationProperty;

            if (navigationProperty != null)
            {
                foreach (CsdlSemanticsEntityContainer container in this.Model.EntityContainers())
                {
                    IEnumerable <CsdlSemanticsAssociationSet> associationSets = container.FindAssociationSets(navigationProperty.Association);
                    if (associationSets != null)
                    {
                        foreach (CsdlSemanticsAssociationSet associationSet in associationSets)
                        {
                            CsdlSemanticsAssociationSetEnd end1 = associationSet.End1 as CsdlSemanticsAssociationSetEnd;
                            CsdlSemanticsAssociationSetEnd end2 = associationSet.End2 as CsdlSemanticsAssociationSetEnd;
                            if (associationSet.End1.EntitySet == this && navigationProperty.To == associationSet.End2.Role)
                            {
                                this.Model.SetAssociationSetName(associationSet.End1.EntitySet, property, associationSet.Name);
                                if (end1 != null && end2 != null)
                                {
                                    this.Model.SetAssociationSetAnnotations(end1.EntitySet, property, associationSet.DirectValueAnnotations, end1.DirectValueAnnotations, end2.DirectValueAnnotations);
                                }

                                return(associationSet.End2.EntitySet);
                            }
                            else if (associationSet.End2.EntitySet == this && navigationProperty.To == associationSet.End1.Role)
                            {
                                this.Model.SetAssociationSetName(associationSet.End2.EntitySet, property, associationSet.Name);
                                if (end1 != null && end2 != null)
                                {
                                    this.Model.SetAssociationSetAnnotations(end2.EntitySet, property, associationSet.DirectValueAnnotations, end2.DirectValueAnnotations, end1.DirectValueAnnotations);
                                }

                                return(associationSet.End1.EntitySet);
                            }
                        }
                    }
                }
            }

            return(null);
        }
			public SilentPartner(CsdlSemanticsNavigationProperty partner)
			{
				this.typeCache = new Cache<CsdlSemanticsNavigationProperty.SilentPartner, IEdmTypeReference>();
				this.partner = partner;
				partner.Model.SetAssociationNamespace(this, partner.Association.Namespace);
				partner.Model.SetAssociationName(this, partner.Association.Name);
				partner.Model.SetAssociationEndName(this, partner.To.Name);
			}
            public SilentPartner(CsdlSemanticsNavigationProperty partner)
            {
                this.partner = partner;

                partner.Model.SetAssociationNamespace(this, partner.Association.Namespace);
                partner.Model.SetAssociationName(this, partner.Association.Name);
                partner.Model.SetAssociationEndName(this, partner.To.Name);
            }