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
- WindowsSpinner.cs
- CounterSample.cs
- SqlNamer.cs
- CodeGroup.cs
- TiffBitmapEncoder.cs
- CallInfo.cs
- Panel.cs
- GatewayIPAddressInformationCollection.cs
- Transform3D.cs
- TypeInfo.cs
- QueryContinueDragEvent.cs
- SqlServer2KCompatibilityAnnotation.cs
- ResourceExpressionBuilder.cs
- ButtonFieldBase.cs
- StaticFileHandler.cs
- EditorZoneBase.cs
- VisualStyleElement.cs
- cache.cs
- Rule.cs
- DoubleAnimation.cs
- LastQueryOperator.cs
- RoleManagerSection.cs
- XmlHelper.cs
- PeerNearMe.cs
- DataGridViewColumnDesignTimeVisibleAttribute.cs
- ContentFileHelper.cs
- AsnEncodedData.cs
- DescendantOverDescendantQuery.cs
- ObjectDataSourceView.cs
- DocumentViewerAutomationPeer.cs
- LineGeometry.cs
- DatatypeImplementation.cs
- XmlUnspecifiedAttribute.cs
- CursorEditor.cs
- SoapUnknownHeader.cs
- WebServiceHandlerFactory.cs
- ListItemCollection.cs
- DataGridCell.cs
- ListViewItemMouseHoverEvent.cs
- x509utils.cs
- PropertyNames.cs
- KeyInfo.cs
- WpfGeneratedKnownProperties.cs
- ConfigurationErrorsException.cs
- TextRangeEditTables.cs
- HandledEventArgs.cs
- TemplatePropertyEntry.cs
- NewArray.cs
- ProcessProtocolHandler.cs
- ListBase.cs
- ObjectTag.cs
- SupportsEventValidationAttribute.cs
- ConvertersCollection.cs
- AtomParser.cs
- WhitespaceRuleReader.cs
- UserPreferenceChangedEventArgs.cs
- WindowExtensionMethods.cs
- StyleSelector.cs
- InputLanguageCollection.cs
- AppSettingsSection.cs
- ProtectedUri.cs
- ToolStripDropDownClosedEventArgs.cs
- Drawing.cs
- PinnedBufferMemoryStream.cs
- DataServiceProviderMethods.cs
- IPPacketInformation.cs
- ProfilePropertyMetadata.cs
- SystemFonts.cs
- TableRow.cs
- BezierSegment.cs
- SafeFindHandle.cs
- ApplicationSecurityManager.cs
- ColumnResult.cs
- ToolStripProgressBar.cs
- CharKeyFrameCollection.cs
- PipeException.cs
- TextLineResult.cs
- XPathDocumentNavigator.cs
- WebServiceClientProxyGenerator.cs
- TypeName.cs
- ViewStateException.cs
- ResourceDisplayNameAttribute.cs
- SemanticValue.cs
- TcpChannelFactory.cs
- BamlLocalizabilityResolver.cs
- CacheHelper.cs
- TextSelectionHelper.cs
- IsolatedStorageFilePermission.cs
- ToolBarButton.cs
- CompensateDesigner.cs
- CancellableEnumerable.cs
- DataListComponentEditor.cs
- ViewManager.cs
- InfoCardCryptoHelper.cs
- AssemblyNameProxy.cs
- DataKeyPropertyAttribute.cs
- DbConnectionPoolCounters.cs
- CacheOutputQuery.cs
- GridToolTip.cs
- UInt64Storage.cs