Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntity / System / Data / Common / internal / materialization / util.cs / 1 / 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
- FileDialog.cs
- CommandField.cs
- ButtonAutomationPeer.cs
- Internal.cs
- SQLBoolean.cs
- PeerService.cs
- ToolStripRendererSwitcher.cs
- IsolatedStorage.cs
- DomainUpDown.cs
- ResolvedKeyFrameEntry.cs
- DLinqColumnProvider.cs
- TriggerBase.cs
- CaseInsensitiveComparer.cs
- EntityUtil.cs
- WebColorConverter.cs
- PassportAuthentication.cs
- XmlReaderSettings.cs
- xmlfixedPageInfo.cs
- ComponentResourceKeyConverter.cs
- XmlDocument.cs
- GlobalizationSection.cs
- documentsequencetextpointer.cs
- ManageRequest.cs
- Span.cs
- StyleSheetComponentEditor.cs
- ServiceHttpModule.cs
- mediaeventshelper.cs
- QuaternionKeyFrameCollection.cs
- CategoryNameCollection.cs
- SQLString.cs
- LineGeometry.cs
- PointCollection.cs
- EntityFrameworkVersions.cs
- RegexStringValidatorAttribute.cs
- AutomationIdentifierGuids.cs
- ServiceModelEnhancedConfigurationElementCollection.cs
- SerializationStore.cs
- ControlBindingsConverter.cs
- GridToolTip.cs
- ItemsControl.cs
- EntityClientCacheEntry.cs
- GeometryModel3D.cs
- BamlLocalizableResourceKey.cs
- ServerValidateEventArgs.cs
- SafeCryptoHandles.cs
- XmlSchemaAttributeGroup.cs
- Exception.cs
- ResourcesBuildProvider.cs
- DelimitedListTraceListener.cs
- NotifyInputEventArgs.cs
- CngAlgorithm.cs
- ChannelEndpointElementCollection.cs
- ResourceAssociationTypeEnd.cs
- SpecialNameAttribute.cs
- IERequestCache.cs
- ConditionalWeakTable.cs
- ProfileSection.cs
- ResourcePermissionBaseEntry.cs
- MetafileHeaderWmf.cs
- IndentTextWriter.cs
- TextFormatterContext.cs
- CodeTypeOfExpression.cs
- BamlLocalizer.cs
- RectKeyFrameCollection.cs
- Panel.cs
- SelectionService.cs
- ViewGenerator.cs
- XmlSchemaAnnotated.cs
- altserialization.cs
- ContentValidator.cs
- CodeMemberMethod.cs
- MultipleCopiesCollection.cs
- PathGeometry.cs
- FormClosingEvent.cs
- Resources.Designer.cs
- WindowHideOrCloseTracker.cs
- RectangleHotSpot.cs
- WriteFileContext.cs
- VirtualPathProvider.cs
- AccessViolationException.cs
- ParenthesizePropertyNameAttribute.cs
- ProtocolsSection.cs
- IntegerValidator.cs
- DesignTimeData.cs
- SchemaComplexType.cs
- FastPropertyAccessor.cs
- ClientConfigPaths.cs
- SecurityTokenProvider.cs
- DeviceSpecificDialogCachedState.cs
- RuntimeHelpers.cs
- StringStorage.cs
- BamlStream.cs
- NumberFormatInfo.cs
- FrameworkReadOnlyPropertyMetadata.cs
- SerializationTrace.cs
- PeerResolverElement.cs
- BrowserCapabilitiesFactoryBase.cs
- FlowLayoutSettings.cs
- SapiGrammar.cs
- CustomMenuItemCollection.cs