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 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 [....]
// @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

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TailCallAnalyzer.cs
- EastAsianLunisolarCalendar.cs
- ExtentKey.cs
- TextAutomationPeer.cs
- ContextStack.cs
- XmlSchemaGroupRef.cs
- TextAction.cs
- DetailsViewUpdateEventArgs.cs
- LineServices.cs
- HtmlAnchor.cs
- CodeArrayCreateExpression.cs
- SecurityIdentifierElementCollection.cs
- FaultHandlingFilter.cs
- CacheAxisQuery.cs
- NominalTypeEliminator.cs
- RegexCaptureCollection.cs
- CustomGrammar.cs
- MsmqIntegrationMessageProperty.cs
- RelationshipConstraintValidator.cs
- SystemResourceKey.cs
- TextBoxBase.cs
- CompositeActivityDesigner.cs
- SoapElementAttribute.cs
- ChannelDispatcherCollection.cs
- HandlerBase.cs
- RuleSet.cs
- EffectiveValueEntry.cs
- HttpPostedFile.cs
- WebConfigurationHost.cs
- HTMLTextWriter.cs
- MonthChangedEventArgs.cs
- EncryptedReference.cs
- DefaultObjectMappingItemCollection.cs
- WindowsNonControl.cs
- RemoteAsymmetricSignatureFormatter.cs
- GeometryCollection.cs
- SQLCharsStorage.cs
- ByteKeyFrameCollection.cs
- Pts.cs
- OrthographicCamera.cs
- XmlWellformedWriter.cs
- MenuItemStyleCollection.cs
- JournalEntryStack.cs
- HttpPostedFile.cs
- errorpatternmatcher.cs
- HttpListenerRequest.cs
- Rotation3DAnimation.cs
- Brush.cs
- ProfileParameter.cs
- TableLayoutSettings.cs
- BStrWrapper.cs
- SharedPerformanceCounter.cs
- QuaternionRotation3D.cs
- PrivilegedConfigurationManager.cs
- InstanceDescriptor.cs
- WpfGeneratedKnownProperties.cs
- Timeline.cs
- CodeParameterDeclarationExpression.cs
- TileModeValidation.cs
- PenThreadPool.cs
- SubpageParaClient.cs
- MarkupCompilePass1.cs
- DataServiceKeyAttribute.cs
- ValidationRuleCollection.cs
- ObjectDataSourceDisposingEventArgs.cs
- StaticResourceExtension.cs
- MatcherBuilder.cs
- FigureParaClient.cs
- QuestionEventArgs.cs
- UrlPropertyAttribute.cs
- Imaging.cs
- FormClosingEvent.cs
- OuterGlowBitmapEffect.cs
- RadioButtonBaseAdapter.cs
- OperatorExpressions.cs
- PlanCompiler.cs
- InsufficientMemoryException.cs
- DecimalStorage.cs
- Nullable.cs
- XmlQueryType.cs
- BooleanConverter.cs
- PagerSettings.cs
- DbConnectionPoolCounters.cs
- QilPatternVisitor.cs
- GenericEnumerator.cs
- TextTreeFixupNode.cs
- EllipseGeometry.cs
- AppDomainFactory.cs
- ObjectListFieldsPage.cs
- TreePrinter.cs
- UriTemplate.cs
- Int64Converter.cs
- SourceSwitch.cs
- SystemIcons.cs
- FileUpload.cs
- LinkDescriptor.cs
- GridViewDeletedEventArgs.cs
- NavigationWindowAutomationPeer.cs
- UserControlParser.cs
- ConnectionStringSettings.cs