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
- Reference.cs
- MultiPartWriter.cs
- ConfigurationPropertyAttribute.cs
- HelpKeywordAttribute.cs
- SequentialUshortCollection.cs
- EventLogTraceListener.cs
- MimeTypePropertyAttribute.cs
- EditableLabelControl.cs
- HttpModuleActionCollection.cs
- MasterPageCodeDomTreeGenerator.cs
- XmlLangPropertyAttribute.cs
- FunctionImportMapping.cs
- JsonReaderWriterFactory.cs
- WindowsFormsHost.cs
- NumericUpDownAcceleration.cs
- SiteMapNodeCollection.cs
- XmlSchemaObject.cs
- ObjectViewListener.cs
- RowCache.cs
- MarshalByRefObject.cs
- MultiAsyncResult.cs
- SystemParameters.cs
- FrameworkElement.cs
- SqlCharStream.cs
- XomlSerializationHelpers.cs
- StylusTouchDevice.cs
- CallbackValidator.cs
- NotConverter.cs
- ListControlConvertEventArgs.cs
- UnsafeNativeMethods.cs
- XsdBuilder.cs
- XamlSerializationHelper.cs
- SchemaNotation.cs
- While.cs
- ButtonBaseAutomationPeer.cs
- PixelFormats.cs
- InternalMappingException.cs
- AssemblyCollection.cs
- Compilation.cs
- AsnEncodedData.cs
- StyleSelector.cs
- Journaling.cs
- MessageAction.cs
- ToolboxItemFilterAttribute.cs
- ThreadAbortException.cs
- RequestResizeEvent.cs
- TCPListener.cs
- Delegate.cs
- NodeInfo.cs
- PersonalizableTypeEntry.cs
- HuffModule.cs
- FrugalMap.cs
- Style.cs
- ValidatorCompatibilityHelper.cs
- ObjectViewEntityCollectionData.cs
- AssemblyCache.cs
- RewritingValidator.cs
- DiscardableAttribute.cs
- InputElement.cs
- TableDetailsRow.cs
- GC.cs
- OneToOneMappingSerializer.cs
- EditorBrowsableAttribute.cs
- DataObjectMethodAttribute.cs
- Clipboard.cs
- EditorPartChrome.cs
- FixedPageAutomationPeer.cs
- GridViewEditEventArgs.cs
- WhitespaceRuleLookup.cs
- FormsAuthenticationTicket.cs
- StringInfo.cs
- ParameterCollection.cs
- TextCompositionManager.cs
- TemplateComponentConnector.cs
- RoleService.cs
- SpAudioStreamWrapper.cs
- QilTypeChecker.cs
- PageContentCollection.cs
- XmlSerializerSection.cs
- IndexExpression.cs
- As.cs
- TypeBuilderInstantiation.cs
- EnterpriseServicesHelper.cs
- MarkupCompilePass1.cs
- EntityProviderFactory.cs
- InputScope.cs
- DataGridTable.cs
- ResetableIterator.cs
- DataSourceXmlElementAttribute.cs
- FileDialog_Vista.cs
- WindowsAuthenticationEventArgs.cs
- SQLBinaryStorage.cs
- StatusBarPanel.cs
- InternalBufferOverflowException.cs
- CqlLexerHelpers.cs
- _Rfc2616CacheValidators.cs
- Set.cs
- Bold.cs
- Form.cs
- SafeFileMappingHandle.cs