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
- Operators.cs
- StateDesignerConnector.cs
- HttpListenerContext.cs
- XamlFilter.cs
- ToolStripItemDesigner.cs
- NativeWindow.cs
- FrameworkPropertyMetadata.cs
- SizeConverter.cs
- SqlSupersetValidator.cs
- DetailsViewRow.cs
- SettingsAttributes.cs
- DataGridViewRowsAddedEventArgs.cs
- TokenBasedSetEnumerator.cs
- MatrixAnimationBase.cs
- MultipleViewPattern.cs
- CodeExporter.cs
- SiteMapNode.cs
- AssertFilter.cs
- OdbcConnectionOpen.cs
- WebControl.cs
- QueryOutputWriter.cs
- DisplayMemberTemplateSelector.cs
- HitTestDrawingContextWalker.cs
- DefaultIfEmptyQueryOperator.cs
- SqlExpander.cs
- HttpChannelHelper.cs
- DrawingBrush.cs
- ListViewItemEventArgs.cs
- XPathItem.cs
- DBPropSet.cs
- AttributeEmitter.cs
- ToolTipService.cs
- MasterPageCodeDomTreeGenerator.cs
- HostAdapter.cs
- GACIdentityPermission.cs
- BindingElementExtensionElement.cs
- TemplateControlBuildProvider.cs
- ObjectDataSourceFilteringEventArgs.cs
- ActivityTrace.cs
- TextPointer.cs
- Main.cs
- Model3D.cs
- UseAttributeSetsAction.cs
- FixUp.cs
- RepeatInfo.cs
- XmlSerializerNamespaces.cs
- DocumentPaginator.cs
- CodePageEncoding.cs
- SimpleHandlerBuildProvider.cs
- CreateUserWizardStep.cs
- DataObjectPastingEventArgs.cs
- AstNode.cs
- SchemaImporterExtension.cs
- CapabilitiesPattern.cs
- TreeViewCancelEvent.cs
- TypeCodeDomSerializer.cs
- SimpleRecyclingCache.cs
- MetadataArtifactLoader.cs
- CharEnumerator.cs
- DashStyle.cs
- DataGridViewCellToolTipTextNeededEventArgs.cs
- FormsAuthenticationTicket.cs
- FontNamesConverter.cs
- SerializerProvider.cs
- AttributeInfo.cs
- HyperLinkColumn.cs
- GeometryModel3D.cs
- SqlCrossApplyToCrossJoin.cs
- WebPartZoneCollection.cs
- SaveFileDialog.cs
- SqlClientPermission.cs
- Debug.cs
- DeclaredTypeElement.cs
- EncryptedPackageFilter.cs
- DesignerForm.cs
- RuntimeEnvironment.cs
- ValueHandle.cs
- ListControl.cs
- GridLengthConverter.cs
- ExternalCalls.cs
- SpecularMaterial.cs
- UniqueEventHelper.cs
- CodeSnippetExpression.cs
- StdValidatorsAndConverters.cs
- SystemWebSectionGroup.cs
- OperandQuery.cs
- SqlLiftWhereClauses.cs
- DocumentScope.cs
- GZipStream.cs
- AlgoModule.cs
- SByteStorage.cs
- SafeLibraryHandle.cs
- SecuritySessionClientSettings.cs
- PersonalizationDictionary.cs
- GiveFeedbackEvent.cs
- TextServicesCompartmentContext.cs
- PartialTrustVisibleAssembliesSection.cs
- ToolboxItemCollection.cs
- OperationAbortedException.cs
- SqlGenericUtil.cs