Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Common / internal / materialization / util.cs / 1305376 / util.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
using System.Data.Metadata.Edm;
using System.Data.Mapping;
namespace System.Data.Common.Internal.Materialization
{
static class Util
{
///
/// Retrieves a mapping to CLR type for the given EDM type. Assumes the MetadataWorkspace has no
///
internal static ObjectTypeMapping GetObjectMapping(EdmType type, MetadataWorkspace workspace)
{
// Check if the workspace has cspace item collection registered with it. If not, then its a case
// of public materializer trying to create objects from PODR or EntityDataReader with no context.
ItemCollection collection;
if (workspace.TryGetItemCollection(DataSpace.CSpace, out collection))
{
return (ObjectTypeMapping)workspace.GetMap(type, DataSpace.OCSpace);
}
else
{
EdmType ospaceType;
EdmType cspaceType;
// If its a case of EntityDataReader with no context, the typeUsage which is passed in must contain
// a cspace type. We need to look up an OSpace type in the ospace item collection and then create
// ocMapping
if (type.DataSpace == DataSpace.CSpace)
{
// if its a primitive type, then the names will be different for CSpace type and OSpace type
if (Helper.IsPrimitiveType(type))
{
ospaceType = workspace.GetMappedPrimitiveType(((PrimitiveType)type).PrimitiveTypeKind, DataSpace.OSpace);
}
else
{
// Metadata will throw if there is no item with this identity present.
// Is this exception fine or does object materializer code wants to wrap and throw a new exception
ospaceType = workspace.GetItem(type.FullName, DataSpace.OSpace);
}
cspaceType = type;
}
else
{
// In case of PODR, there is no cspace at all. We must create a fake ocmapping, with ospace types
// on both the ends
ospaceType = type;
cspaceType = type;
}
// This condition must be hit only when someone is trying to materialize a legacy data reader and we
// don't have the CSpace metadata.
if (!Helper.IsPrimitiveType(ospaceType) && !Helper.IsEntityType(ospaceType) && !Helper.IsComplexType(ospaceType))
{
throw EntityUtil.MaterializerUnsupportedType();
}
ObjectTypeMapping typeMapping;
if (Helper.IsPrimitiveType(ospaceType))
{
typeMapping = new ObjectTypeMapping(ospaceType, cspaceType);
}
else
{
typeMapping = DefaultObjectMappingItemCollection.LoadObjectMapping(cspaceType, ospaceType, null);
}
return typeMapping;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
using System.Data.Metadata.Edm;
using System.Data.Mapping;
namespace System.Data.Common.Internal.Materialization
{
static class Util
{
///
/// Retrieves a mapping to CLR type for the given EDM type. Assumes the MetadataWorkspace has no
///
internal static ObjectTypeMapping GetObjectMapping(EdmType type, MetadataWorkspace workspace)
{
// Check if the workspace has cspace item collection registered with it. If not, then its a case
// of public materializer trying to create objects from PODR or EntityDataReader with no context.
ItemCollection collection;
if (workspace.TryGetItemCollection(DataSpace.CSpace, out collection))
{
return (ObjectTypeMapping)workspace.GetMap(type, DataSpace.OCSpace);
}
else
{
EdmType ospaceType;
EdmType cspaceType;
// If its a case of EntityDataReader with no context, the typeUsage which is passed in must contain
// a cspace type. We need to look up an OSpace type in the ospace item collection and then create
// ocMapping
if (type.DataSpace == DataSpace.CSpace)
{
// if its a primitive type, then the names will be different for CSpace type and OSpace type
if (Helper.IsPrimitiveType(type))
{
ospaceType = workspace.GetMappedPrimitiveType(((PrimitiveType)type).PrimitiveTypeKind, DataSpace.OSpace);
}
else
{
// Metadata will throw if there is no item with this identity present.
// Is this exception fine or does object materializer code wants to wrap and throw a new exception
ospaceType = workspace.GetItem(type.FullName, DataSpace.OSpace);
}
cspaceType = type;
}
else
{
// In case of PODR, there is no cspace at all. We must create a fake ocmapping, with ospace types
// on both the ends
ospaceType = type;
cspaceType = type;
}
// This condition must be hit only when someone is trying to materialize a legacy data reader and we
// don't have the CSpace metadata.
if (!Helper.IsPrimitiveType(ospaceType) && !Helper.IsEntityType(ospaceType) && !Helper.IsComplexType(ospaceType))
{
throw EntityUtil.MaterializerUnsupportedType();
}
ObjectTypeMapping typeMapping;
if (Helper.IsPrimitiveType(ospaceType))
{
typeMapping = new ObjectTypeMapping(ospaceType, cspaceType);
}
else
{
typeMapping = DefaultObjectMappingItemCollection.LoadObjectMapping(cspaceType, ospaceType, null);
}
return typeMapping;
}
}
}
}
// 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
- ClientBuildManager.cs
- ErrorFormatterPage.cs
- ClientConfigurationHost.cs
- SocketStream.cs
- ProvidersHelper.cs
- PreviewPrintController.cs
- DrawTreeNodeEventArgs.cs
- NaturalLanguageHyphenator.cs
- MapPathBasedVirtualPathProvider.cs
- ButtonBase.cs
- MetabaseReader.cs
- ToolboxItem.cs
- cookiecontainer.cs
- ObjectPropertyMapping.cs
- FontUnitConverter.cs
- ClientConfigurationHost.cs
- AliasedSlot.cs
- MailMessage.cs
- PersonalizationAdministration.cs
- SwitchElementsCollection.cs
- AutomationProperty.cs
- EntityDataSourceStatementEditor.cs
- DragDrop.cs
- _DigestClient.cs
- TypefaceMetricsCache.cs
- ResourceDisplayNameAttribute.cs
- ManagementObjectSearcher.cs
- EpmAttributeNameBuilder.cs
- DeflateEmulationStream.cs
- FixedPageStructure.cs
- ReferencedAssemblyResolver.cs
- SafeNativeMethods.cs
- DetailsViewUpdateEventArgs.cs
- Sentence.cs
- CompiledRegexRunnerFactory.cs
- TextSegment.cs
- UnionExpr.cs
- TrackBarRenderer.cs
- BuilderElements.cs
- RbTree.cs
- TextRenderer.cs
- ListenerChannelContext.cs
- WrappedIUnknown.cs
- PKCS1MaskGenerationMethod.cs
- ZoneLinkButton.cs
- Int32RectConverter.cs
- SqlAggregateChecker.cs
- Comparer.cs
- FixedSOMFixedBlock.cs
- CheckBoxStandardAdapter.cs
- CodeDirectionExpression.cs
- XmlMembersMapping.cs
- DataContractSerializerOperationGenerator.cs
- ResizeBehavior.cs
- NameValueFileSectionHandler.cs
- SecurityToken.cs
- DbConnectionOptions.cs
- Light.cs
- PropertyTab.cs
- RuntimeConfigLKG.cs
- EntityClassGenerator.cs
- GridViewDeleteEventArgs.cs
- DefaultDiscoveryService.cs
- TimeManager.cs
- DesignerOptionService.cs
- ChannelRequirements.cs
- PerfCounterSection.cs
- CodePropertyReferenceExpression.cs
- ManagedFilter.cs
- PreviewControlDesigner.cs
- Vector.cs
- SerializerProvider.cs
- InkCanvasInnerCanvas.cs
- X509CertificateStore.cs
- PathFigureCollectionConverter.cs
- StringResourceManager.cs
- ContentPlaceHolder.cs
- OracleNumber.cs
- ToolboxItemCollection.cs
- TextBlockAutomationPeer.cs
- CodeSnippetExpression.cs
- MessageBox.cs
- EmissiveMaterial.cs
- DynamicObjectAccessor.cs
- SchemaConstraints.cs
- MethodImplAttribute.cs
- CommunicationObjectManager.cs
- NoPersistProperty.cs
- StreamGeometryContext.cs
- DockPanel.cs
- DataGridViewComboBoxEditingControl.cs
- ManualResetEventSlim.cs
- InternalPolicyElement.cs
- EventSourceCreationData.cs
- DynamicValidator.cs
- VScrollBar.cs
- COM2ExtendedUITypeEditor.cs
- CategoryValueConverter.cs
- AssociatedControlConverter.cs
- TraceSection.cs