Code:
/ 4.0 / 4.0 / 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 IEnumerableGetMappingsForEntitySetAndType(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 IEnumerableGetMappingsForEntitySetAndSuperTypes(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 IEnumerableGetIsTypeOfMappingsForEntitySetAndType(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 [....] // @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 IEnumerableGetMappingsForEntitySetAndType(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 IEnumerableGetMappingsForEntitySetAndSuperTypes(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 IEnumerableGetIsTypeOfMappingsForEntitySetAndType(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
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- fixedPageContentExtractor.cs
- DCSafeHandle.cs
- StringComparer.cs
- DataSourceControl.cs
- ApplicationTrust.cs
- formatter.cs
- BaseComponentEditor.cs
- Command.cs
- GridViewPageEventArgs.cs
- SerializationInfoEnumerator.cs
- ThaiBuddhistCalendar.cs
- XmlSchemaInfo.cs
- MediaEntryAttribute.cs
- TimeZoneNotFoundException.cs
- BroadcastEventHelper.cs
- AssemblyAttributesGoHere.cs
- ClientData.cs
- HttpCookieCollection.cs
- LogicalExpr.cs
- CompressStream.cs
- TargetParameterCountException.cs
- SecurityTokenResolver.cs
- CollectionBase.cs
- TemplateControlParser.cs
- ScriptingWebServicesSectionGroup.cs
- documentation.cs
- DbCommandTree.cs
- WindowsMenu.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- SafeMemoryMappedFileHandle.cs
- Literal.cs
- Update.cs
- odbcmetadatafactory.cs
- VirtualDirectoryMapping.cs
- TraceContext.cs
- DesignerSerializationManager.cs
- PrintPageEvent.cs
- RelativeSource.cs
- RegistryPermission.cs
- XmlSerializerSection.cs
- ExecutedRoutedEventArgs.cs
- UserMapPath.cs
- EntityDataSourceUtil.cs
- XmlNamespaceManager.cs
- InputProcessorProfiles.cs
- MemberAccessException.cs
- QilExpression.cs
- SqlOuterApplyReducer.cs
- TextSerializer.cs
- CustomErrorsSectionWrapper.cs
- RichTextBox.cs
- XmlAnyElementAttribute.cs
- Model3D.cs
- MULTI_QI.cs
- ReservationNotFoundException.cs
- TextDecoration.cs
- CellTreeNodeVisitors.cs
- ClientTarget.cs
- ScrollProperties.cs
- OwnerDrawPropertyBag.cs
- TypeNameConverter.cs
- CustomAttribute.cs
- WebBrowserProgressChangedEventHandler.cs
- DesignerVerbCollection.cs
- UserControlDocumentDesigner.cs
- ECDiffieHellmanPublicKey.cs
- PackageRelationshipSelector.cs
- TableItemProviderWrapper.cs
- EntityTemplateFactory.cs
- DataTable.cs
- ShaderEffect.cs
- EncryptedPackage.cs
- BaseDataList.cs
- SortDescription.cs
- HwndAppCommandInputProvider.cs
- PreviewPrintController.cs
- X509Chain.cs
- InvalidAsynchronousStateException.cs
- TextDecorationUnitValidation.cs
- AsyncOperationManager.cs
- ClassHandlersStore.cs
- PrinterResolution.cs
- ControlCachePolicy.cs
- XamlSerializationHelper.cs
- MultilineStringConverter.cs
- ProjectionCamera.cs
- SafeArchiveContext.cs
- DataGridViewDataConnection.cs
- ImageConverter.cs
- sqlcontext.cs
- DoubleCollection.cs
- DesignBinding.cs
- SqlGatherProducedAliases.cs
- ParamArrayAttribute.cs
- GB18030Encoding.cs
- Point3DCollectionConverter.cs
- SqlBulkCopyColumnMappingCollection.cs
- SqlUDTStorage.cs
- WindowsListViewItem.cs
- ModuleBuilderData.cs