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
- ItemList.cs
- PriorityChain.cs
- ObjectParameter.cs
- HttpCookie.cs
- CodeConditionStatement.cs
- SmtpNetworkElement.cs
- _BaseOverlappedAsyncResult.cs
- pingexception.cs
- X509Certificate2.cs
- WebMethodAttribute.cs
- TextSegment.cs
- XslAstAnalyzer.cs
- PngBitmapEncoder.cs
- DiscoveryClientDocuments.cs
- SortableBindingList.cs
- CreatingCookieEventArgs.cs
- StrongNameMembershipCondition.cs
- SQLGuidStorage.cs
- DbgCompiler.cs
- LogExtentCollection.cs
- filewebrequest.cs
- SoapFaultCodes.cs
- ChangePassword.cs
- WaitForChangedResult.cs
- TreeNodeSelectionProcessor.cs
- BrowserCapabilitiesFactoryBase.cs
- hwndwrapper.cs
- ServiceControllerDesigner.cs
- PointF.cs
- DurableInstancingOptions.cs
- TableCell.cs
- LayoutEngine.cs
- DataSetMappper.cs
- ModifiableIteratorCollection.cs
- UnsafeNativeMethodsCLR.cs
- TextUtf8RawTextWriter.cs
- TdsValueSetter.cs
- RadioButton.cs
- IntranetCredentialPolicy.cs
- Interlocked.cs
- TextFormatterContext.cs
- GridViewRowPresenterBase.cs
- ResolveMatchesMessage11.cs
- NetCodeGroup.cs
- TextLine.cs
- altserialization.cs
- GenerateHelper.cs
- FormViewDeleteEventArgs.cs
- ExpressionBuilderCollection.cs
- AssemblyFilter.cs
- IgnoreDeviceFilterElement.cs
- TextTreeRootTextBlock.cs
- UserInitiatedNavigationPermission.cs
- FormatterServices.cs
- Int64.cs
- WinFormsSpinner.cs
- CapabilitiesSection.cs
- BlobPersonalizationState.cs
- GrammarBuilderDictation.cs
- IriParsingElement.cs
- OptionalColumn.cs
- DelegatingChannelListener.cs
- BitmapEffectInput.cs
- DoWhileDesigner.xaml.cs
- ZipIOExtraField.cs
- DataGridViewCellLinkedList.cs
- MethodInfo.cs
- TransportListener.cs
- DataGridrowEditEndingEventArgs.cs
- BindingExpressionUncommonField.cs
- RectangleHotSpot.cs
- PasswordTextContainer.cs
- StringInfo.cs
- IdentityModelDictionary.cs
- TaskbarItemInfo.cs
- TypeSchema.cs
- OdbcPermission.cs
- WriterOutput.cs
- SafeFileMappingHandle.cs
- SourceFileBuildProvider.cs
- StrokeCollectionDefaultValueFactory.cs
- NamespaceCollection.cs
- FileUtil.cs
- OracleString.cs
- ManualResetEventSlim.cs
- MobileRedirect.cs
- ButtonChrome.cs
- DeferredReference.cs
- StubHelpers.cs
- WebColorConverter.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- UiaCoreProviderApi.cs
- COSERVERINFO.cs
- ProfileProvider.cs
- ObjectListSelectEventArgs.cs
- TypefaceCollection.cs
- CompositionAdorner.cs
- WebPartVerb.cs
- FileInfo.cs
- XmlSchemaGroupRef.cs