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
- TextSelectionHelper.cs
- EtwTrackingBehaviorElement.cs
- EventSetter.cs
- _HeaderInfoTable.cs
- Encoder.cs
- EventBindingService.cs
- SelectedDatesCollection.cs
- PackWebRequest.cs
- precedingquery.cs
- CalloutQueueItem.cs
- XmlSiteMapProvider.cs
- WebMessageEncoderFactory.cs
- HttpInputStream.cs
- SspiSecurityTokenParameters.cs
- XmlName.cs
- Inflater.cs
- DataGridViewRowConverter.cs
- EmbossBitmapEffect.cs
- DbParameterHelper.cs
- ClosableStream.cs
- RecognizeCompletedEventArgs.cs
- SmiEventStream.cs
- InputScopeAttribute.cs
- PeerNameResolver.cs
- SoapCodeExporter.cs
- Activator.cs
- DrawingContextDrawingContextWalker.cs
- StretchValidation.cs
- StringArrayEditor.cs
- SessionStateContainer.cs
- __Filters.cs
- dtdvalidator.cs
- EntityCollectionChangedParams.cs
- DataListCommandEventArgs.cs
- StyleHelper.cs
- WebCategoryAttribute.cs
- ContentType.cs
- StandardToolWindows.cs
- DataReaderContainer.cs
- Encoder.cs
- BindingObserver.cs
- PageMediaType.cs
- TextEffectResolver.cs
- ScrollBarAutomationPeer.cs
- CalendarDay.cs
- InputBuffer.cs
- compensatingcollection.cs
- XmlArrayItemAttributes.cs
- CharUnicodeInfo.cs
- ToolboxComponentsCreatingEventArgs.cs
- TextChangedEventArgs.cs
- MeasurementDCInfo.cs
- DataGridViewRowEventArgs.cs
- VBCodeProvider.cs
- ServiceModelTimeSpanValidator.cs
- EnumType.cs
- GridViewSortEventArgs.cs
- PropertyDescriptorCollection.cs
- ImageBrush.cs
- Menu.cs
- XmlArrayAttribute.cs
- BindingBase.cs
- exports.cs
- MetricEntry.cs
- XmlSerializationGeneratedCode.cs
- SmtpFailedRecipientsException.cs
- DataServiceStreamProviderWrapper.cs
- DashStyle.cs
- OuterGlowBitmapEffect.cs
- FirstMatchCodeGroup.cs
- AuditLog.cs
- SafeLibraryHandle.cs
- SoapParser.cs
- UnsafeCollabNativeMethods.cs
- DispatchChannelSink.cs
- CharEntityEncoderFallback.cs
- WCFBuildProvider.cs
- EventDescriptor.cs
- TransferRequestHandler.cs
- RoutedEvent.cs
- RectangleGeometry.cs
- BamlVersionHeader.cs
- ReflectionTypeLoadException.cs
- TextCompositionEventArgs.cs
- diagnosticsswitches.cs
- TranslateTransform.cs
- SecondaryIndexDefinition.cs
- ConstructorNeedsTagAttribute.cs
- SiteMapNode.cs
- SpanIndex.cs
- StrokeCollectionDefaultValueFactory.cs
- SqlUnionizer.cs
- TextFormatterHost.cs
- XmlSerializerSection.cs
- mediapermission.cs
- TrustManager.cs
- Win32.cs
- TimerTable.cs
- StreamGeometry.cs
- LogArchiveSnapshot.cs