MappingMetadataHelper.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntity / System / Data / Metadata / MappingMetadataHelper.cs / 1 / MappingMetadataHelper.cs

                            //---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// 
// @owner  [....],[....]
//--------------------------------------------------------------------- 
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.
//---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// 
// @owner  [....],[....]
//--------------------------------------------------------------------- 
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