public GetReferenceType ( ) : System.Data.Metadata.Edm.RefType | ||
return | System.Data.Metadata.Edm.RefType |
private AssociationEndMember CreateAssociationEnd(LoadMethodSessionState session, EntityType type, RelationshipMultiplicity multiplicity, UniqueIdentifierService usedEndNames, OperationAction deleteAction ) { string role = usedEndNames.AdjustIdentifier(type.Name); RefType refType = type.GetReferenceType(); AssociationEndMember end = new AssociationEndMember(role, refType, multiplicity); end.DeleteBehavior = deleteAction; session.RelationshipEndTypeLookup.Add(end, type); return end; }
/// <summary> /// Initialize the end member if its not initialized already /// </summary> /// <param name="associationType"></param> /// <param name="end"></param> /// <param name="endMemberType"></param> private static AssociationEndMember InitializeAssociationEndMember(AssociationType associationType, Som.IRelationshipEnd end, EntityType endMemberType) { AssociationEndMember associationEnd; EdmMember member; // make sure that the end is not initialized as of yet if (!associationType.Members.TryGetValue(end.Name, false/*ignoreCase*/, out member)) { // Create the end member and add the operations associationEnd = new AssociationEndMember(end.Name, endMemberType.GetReferenceType(), end.Multiplicity.Value); associationType.AddKeyMember(associationEnd); } else { associationEnd = (AssociationEndMember)member; } //Extract the optional Documentation Som.RelationshipEnd relationshipEnd = end as Som.RelationshipEnd; if (relationshipEnd != null && (relationshipEnd.Documentation != null)) { associationEnd.Documentation = ConvertToDocumentation(relationshipEnd.Documentation); } return associationEnd; }
private void CreateRelationships() { if (SessionData.ConventionBasedRelationshipsAreLoaded) { return; } SessionData.ConventionBasedRelationshipsAreLoaded = true; // find all the relationships foreach (AssociationType cspaceAssociation in SessionData.EdmItemCollection.GetItems <AssociationType>()) { Debug.Assert(cspaceAssociation.RelationshipEndMembers.Count == 2, "Relationships are assumed to have exactly two ends"); if (SessionData.CspaceToOspace.ContainsKey(cspaceAssociation)) { // don't try to load relationships that we already know about continue; } EdmType[] ospaceEndTypes = new EdmType[2]; if (SessionData.CspaceToOspace.TryGetValue(GetRelationshipEndType(cspaceAssociation.RelationshipEndMembers[0]), out ospaceEndTypes[0]) && SessionData.CspaceToOspace.TryGetValue(GetRelationshipEndType(cspaceAssociation.RelationshipEndMembers[1]), out ospaceEndTypes[1])) { Debug.Assert(ospaceEndTypes[0] is StructuralType); Debug.Assert(ospaceEndTypes[1] is StructuralType); // if we can find both ends of the relationship, then create it AssociationType ospaceAssociation = new AssociationType(cspaceAssociation.Name, cspaceAssociation.NamespaceName, cspaceAssociation.IsForeignKey, DataSpace.OSpace); for (int i = 0; i < cspaceAssociation.RelationshipEndMembers.Count; i++) { EntityType ospaceEndType = (EntityType)ospaceEndTypes[i]; RelationshipEndMember cspaceEnd = cspaceAssociation.RelationshipEndMembers[i]; ospaceAssociation.AddKeyMember(new AssociationEndMember(cspaceEnd.Name, ospaceEndType.GetReferenceType(), cspaceEnd.RelationshipMultiplicity)); } CacheEntry.TypesInAssembly.Add(ospaceAssociation); SessionData.TypesInLoading.Add(ospaceAssociation.FullName, ospaceAssociation); SessionData.CspaceToOspace.Add(cspaceAssociation, ospaceAssociation); } } }