/// <summary> /// Finds members participating in the assocciation and adds them to the <paramref name="interestingMembers"/>. /// </summary> /// <param name="associationTypeMapping">Association type mapping. Must not be null.</param> /// <param name="interestingMembers">The list the interesting members (if any) will be added to. Must not be null.</param> private static void FindInterestingAssociationMappingMembers(StorageAssociationTypeMapping associationTypeMapping, List <EdmMember> interestingMembers) { Debug.Assert(associationTypeMapping != null, "entityTypeMapping != null"); Debug.Assert(interestingMembers != null, "interestingMembers != null"); //(2) Ends participating in association are "interesting" interestingMembers.AddRange( associationTypeMapping .MappingFragments .SelectMany(m => m.AllProperties) .OfType <StorageEndPropertyMapping>() .Select(epm => epm.EndMember)); }
/// <summary> /// Finds interesting members for MetdataWorkspace.GetRequiredOriginalValueMembers() and MetdataWorkspace.GetRelevantMembersForUpdate() methods /// for the given <paramref name="entitySet"/> and <paramref name="entityType"/>. /// </summary> /// <param name="entitySet">An EntitySet belonging to the C-Space. Must not be null.</param> /// <param name="entityType">An EntityType that participates in the given EntitySet. Must not be null.</param> /// <param name="interestingMembersKind">Scenario the members should be returned for.</param> /// <returns>ReadOnlyCollection of interesting members for the requested scenario (<paramref name="interestingMembersKind"/>).</returns> private ReadOnlyCollection <EdmMember> FindInterestingMembers(EntitySetBase entitySet, EntityTypeBase entityType, InterestingMembersKind interestingMembersKind) { Debug.Assert(entitySet != null, "entitySet != null"); Debug.Assert(entityType != null, "entityType != null"); var interestingMembers = new List <EdmMember>(); foreach (var storageTypeMapping in MappingMetadataHelper.GetMappingsForEntitySetAndSuperTypes(this, entitySet.EntityContainer, entitySet, entityType)) { StorageAssociationTypeMapping associationTypeMapping = storageTypeMapping as StorageAssociationTypeMapping; if (associationTypeMapping != null) { FindInterestingAssociationMappingMembers(associationTypeMapping, interestingMembers); } else { Debug.Assert(storageTypeMapping is StorageEntityTypeMapping, "StorageEntityTypeMapping expected."); FindInterestingEntityMappingMembers((StorageEntityTypeMapping)storageTypeMapping, interestingMembersKind, interestingMembers); } } // For backwards compatibility we don't return foreign keys from the obsolete MetadataWorkspace.GetRequiredOriginalValueMembers() method if (interestingMembersKind != InterestingMembersKind.RequiredOriginalValueMembers) { FindForeignKeyProperties(entitySet, entityType, interestingMembers); } foreach (var functionMappings in MappingMetadataHelper .GetModificationFunctionMappingsForEntitySetAndType(this, entitySet.EntityContainer, entitySet, entityType) .Where(functionMappings => functionMappings.UpdateFunctionMapping != null)) { FindInterestingFunctionMappingMembers(functionMappings, interestingMembersKind, ref interestingMembers); } Debug.Assert(interestingMembers != null, "interestingMembers must never be null."); return(new ReadOnlyCollection <EdmMember>(interestingMembers.Distinct().ToList())); }
/// <summary> /// Finds members participating in the assocciation and adds them to the <paramref name="interestingMembers"/>. /// </summary> /// <param name="associationTypeMapping">Association type mapping. Must not be null.</param> /// <param name="interestingMembers">The list the interesting members (if any) will be added to. Must not be null.</param> private static void FindInterestingAssociationMappingMembers(StorageAssociationTypeMapping associationTypeMapping, List<EdmMember> interestingMembers) { Debug.Assert(associationTypeMapping != null, "entityTypeMapping != null"); Debug.Assert(interestingMembers != null, "interestingMembers != null"); //(2) Ends participating in association are "interesting" interestingMembers.AddRange( associationTypeMapping .MappingFragments .SelectMany(m => m.AllProperties) .OfType<StorageEndPropertyMapping>() .Select(epm => epm.EndMember)); }