MappingMetadataHelper.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Metadata / MappingMetadataHelper.cs / 1305376 / MappingMetadataHelper.cs

                            //---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// 
// @owner       [....]
// @backupOwner [....] 
//--------------------------------------------------------------------- 
using System.Collections.Generic;
using System.Collections; 
using System.Diagnostics;
using System.Globalization;
using System.Reflection;
using System.Text; 
using System.Xml;
using System.Xml.XPath; 
using System.Data.Mapping; 
using System.IO;
using System.Security; 
using System.Security.Permissions;
using System.Data.Common.Utils;
using System.Collections.ObjectModel;
using System.Linq; 

namespace System.Data.Metadata.Edm 
{ 
    /// 
    /// Helps answer mapping questions since we don't have a good API for mapping information 
    /// 
    internal static class MappingMetadataHelper
    {
 
        internal static IEnumerable GetMappingsForEntitySetAndType(StorageMappingItemCollection mappingCollection, EntityContainer container, EntitySetBase entitySet, EntityTypeBase entityType)
        { 
            Debug.Assert(entityType != null, "EntityType parameter should not be null."); 
            StorageEntityContainerMapping containerMapping = GetEntityContainerMap(mappingCollection, container);
            StorageSetMapping extentMap = containerMapping.GetSetMapping(entitySet.Name); 

            //The Set may have no mapping
            if (extentMap != null)
            { 
                //for each mapping fragment of Type we are interested in within the given set
                //Check use of IsOfTypes in Code review 
                foreach (StorageTypeMapping typeMap in extentMap.TypeMappings.Where(map => map.Types.Union(map.IsOfTypes).Contains(entityType))) 
                {
                    yield return typeMap; 
                }
            }
        }
 
       /// 
       /// Returns all mapping fragments for the given entity set's types and their parent types. 
       ///  
        internal static IEnumerable GetMappingsForEntitySetAndSuperTypes(StorageMappingItemCollection mappingCollection, EntityContainer container, EntitySetBase entitySet, EntityTypeBase childEntityType)
        { 
            return MetadataHelper.GetTypeAndParentTypesOf(childEntityType, mappingCollection.EdmItemCollection, true /*includeAbstractTypes*/).SelectMany(
                edmType =>
                    edmType.EdmEquals(childEntityType) ?
                      GetMappingsForEntitySetAndType(mappingCollection, container, entitySet, (edmType as EntityTypeBase)) 
                    : GetIsTypeOfMappingsForEntitySetAndType(mappingCollection, container, entitySet, (edmType as EntityTypeBase), childEntityType)
                ).ToList(); 
        } 

        ///  
        /// Returns mappings for the given set/type only if the mapping applies also to childEntittyType either via IsTypeOf or explicitly specifying multiple types in mapping fragments.
        /// 
        private static IEnumerable GetIsTypeOfMappingsForEntitySetAndType(StorageMappingItemCollection mappingCollection, EntityContainer container, EntitySetBase entitySet, EntityTypeBase entityType, EntityTypeBase childEntityType)
        { 
            foreach (var mapping in GetMappingsForEntitySetAndType(mappingCollection, container, entitySet, entityType))
            { 
                if (mapping.IsOfTypes.Any(parentType => parentType.IsAssignableFrom(childEntityType)) || mapping.Types.Contains(childEntityType)) 
                {
                    yield return mapping; 
                }
            }
        }
 
        internal static IEnumerable GetFunctionMappingsForEntitySetAndType(StorageMappingItemCollection mappingCollection, EntityContainer container, EntitySetBase entitySet, EntityTypeBase entityType)
        { 
            StorageEntityContainerMapping containerMapping = GetEntityContainerMap(mappingCollection, container); 

            StorageSetMapping extentMap = containerMapping.GetSetMapping(entitySet.Name); 
            StorageEntitySetMapping entitySetMapping = extentMap as StorageEntitySetMapping;

            //The Set may have no mapping
            if (entitySetMapping != null) 
            {
                if (entitySetMapping != null) //could be association set mapping 
                { 
                    foreach (var v in entitySetMapping.FunctionMappings.Where(functionMap => functionMap.EntityType.Equals(entityType)))
                    { 
                        yield return v;
                    }
                }
            } 

        } 
 
        internal static StorageEntityContainerMapping GetEntityContainerMap(StorageMappingItemCollection mappingCollection, EntityContainer entityContainer)
        { 
            ReadOnlyCollection entityContainerMaps = mappingCollection.GetItems();
            StorageEntityContainerMapping entityContainerMap = null;
            foreach (StorageEntityContainerMapping map in entityContainerMaps)
            { 
                if ((entityContainer.Equals(map.EdmEntityContainer))
                    || (entityContainer.Equals(map.StorageEntityContainer))) 
                { 
                    entityContainerMap = map;
                    break; 
                }
            }
            if (entityContainerMap == null)
            { 
                throw new MappingException(System.Data.Entity.Strings.Mapping_NotFound_EntityContainer(entityContainer.Name));
            } 
            return entityContainerMap; 
        }
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK