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
- EventlogProvider.cs
- TypedElement.cs
- BinaryNode.cs
- Path.cs
- ResourceDescriptionAttribute.cs
- Relationship.cs
- FieldCollectionEditor.cs
- HttpPostedFile.cs
- OdbcHandle.cs
- DesignRelationCollection.cs
- PowerModeChangedEventArgs.cs
- ContextMenuStrip.cs
- AncestorChangedEventArgs.cs
- XpsSerializationManagerAsync.cs
- MeasurementDCInfo.cs
- PerformanceCounterPermissionEntry.cs
- WindowsGraphics2.cs
- ButtonChrome.cs
- SHA1.cs
- DataError.cs
- TraceEventCache.cs
- CheckBoxAutomationPeer.cs
- CharEntityEncoderFallback.cs
- _NtlmClient.cs
- CircleEase.cs
- Util.cs
- Enumerable.cs
- SuppressIldasmAttribute.cs
- Site.cs
- XPathNavigator.cs
- ThrowHelper.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- PerformanceCounterPermissionAttribute.cs
- GraphicsPath.cs
- GradientBrush.cs
- PreviewPageInfo.cs
- XmlSchemaObject.cs
- NullableFloatMinMaxAggregationOperator.cs
- XmlNavigatorStack.cs
- CatalogZoneAutoFormat.cs
- EntityDataSourceSelectingEventArgs.cs
- EntityDataSourceColumn.cs
- BevelBitmapEffect.cs
- DataTableReader.cs
- SystemResources.cs
- SynchronizationLockException.cs
- ToolStripPanel.cs
- CompilerGeneratedAttribute.cs
- WindowsImpersonationContext.cs
- BamlTreeUpdater.cs
- CodeFieldReferenceExpression.cs
- BeginEvent.cs
- RSAProtectedConfigurationProvider.cs
- DoubleKeyFrameCollection.cs
- EndpointBehaviorElementCollection.cs
- EncoderParameters.cs
- TextServicesProperty.cs
- ImageSource.cs
- EmptyStringExpandableObjectConverter.cs
- HWStack.cs
- ISAPIWorkerRequest.cs
- PreProcessInputEventArgs.cs
- SemaphoreSlim.cs
- CommandHelper.cs
- SourceLocation.cs
- ResourcesBuildProvider.cs
- BulletDecorator.cs
- TypeConverterValueSerializer.cs
- RoleGroupCollection.cs
- PrinterSettings.cs
- SmiEventSink_DeferedProcessing.cs
- WebPartZone.cs
- SystemIPInterfaceProperties.cs
- InputLanguageCollection.cs
- TailCallAnalyzer.cs
- ScriptServiceAttribute.cs
- DynamicMetaObject.cs
- CodeCompileUnit.cs
- FlowDocumentPageViewerAutomationPeer.cs
- RegistryDataKey.cs
- DuplexClientBase.cs
- X509Utils.cs
- future.cs
- RegisteredHiddenField.cs
- DateTimeHelper.cs
- SwitchAttribute.cs
- JsonUriDataContract.cs
- TimeSpanConverter.cs
- WinOEToolBoxItem.cs
- Base64Stream.cs
- PropertyContainer.cs
- EventHandlersStore.cs
- XmlAttributeProperties.cs
- DataSource.cs
- OracleString.cs
- CodeDirectiveCollection.cs
- SchemaMapping.cs
- SafeWaitHandle.cs
- Validator.cs
- EventLogPermissionAttribute.cs