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