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
- ResXBuildProvider.cs
- DataGridViewColumnStateChangedEventArgs.cs
- RequestCache.cs
- DomNameTable.cs
- ScrollBar.cs
- XmlSchemaObject.cs
- storagemappingitemcollection.viewdictionary.cs
- XmlSchemaInfo.cs
- EntityParameterCollection.cs
- BinaryFormatterWriter.cs
- DispatcherBuilder.cs
- Timer.cs
- BitmapEffectGroup.cs
- DBAsyncResult.cs
- StringTraceRecord.cs
- MetadataCollection.cs
- CatchDesigner.xaml.cs
- RijndaelManaged.cs
- ZipFileInfoCollection.cs
- TreeIterators.cs
- SemanticResultKey.cs
- ScrollViewerAutomationPeer.cs
- ColumnMapCopier.cs
- SafeRightsManagementQueryHandle.cs
- RowUpdatingEventArgs.cs
- EdmToObjectNamespaceMap.cs
- CompModHelpers.cs
- Help.cs
- CornerRadiusConverter.cs
- OutKeywords.cs
- StoreContentChangedEventArgs.cs
- XPathParser.cs
- AbstractDataSvcMapFileLoader.cs
- CachedRequestParams.cs
- GenericXmlSecurityToken.cs
- DataBoundControlHelper.cs
- CryptoApi.cs
- FileSystemEventArgs.cs
- HttpStreamMessage.cs
- DataGridCellAutomationPeer.cs
- WebServiceHandlerFactory.cs
- CodeAssignStatement.cs
- SchemaObjectWriter.cs
- Application.cs
- SqlErrorCollection.cs
- validation.cs
- TargetFrameworkAttribute.cs
- Section.cs
- HitTestResult.cs
- ProfileServiceManager.cs
- ViewBase.cs
- ArraySegment.cs
- WorkflowApplicationTerminatedException.cs
- AbandonedMutexException.cs
- CqlParserHelpers.cs
- DataError.cs
- SizeValueSerializer.cs
- DataColumnCollection.cs
- NumberSubstitution.cs
- DbSetClause.cs
- And.cs
- ProjectionPlanCompiler.cs
- IntPtr.cs
- SettingsSavedEventArgs.cs
- HebrewNumber.cs
- SqlAggregateChecker.cs
- SettingsContext.cs
- CoreSwitches.cs
- DataObjectAttribute.cs
- AssertUtility.cs
- RootProfilePropertySettingsCollection.cs
- ListViewItemCollectionEditor.cs
- Crypto.cs
- PseudoWebRequest.cs
- MembershipPasswordException.cs
- DataServiceBuildProvider.cs
- Rfc2898DeriveBytes.cs
- PassportAuthenticationModule.cs
- PropertyMap.cs
- TakeQueryOptionExpression.cs
- ComponentChangingEvent.cs
- ObjectDataSourceFilteringEventArgs.cs
- CompilerGlobalScopeAttribute.cs
- KeySplineConverter.cs
- SelectorItemAutomationPeer.cs
- StandardOleMarshalObject.cs
- GorillaCodec.cs
- ExtractorMetadata.cs
- DataServiceRequestException.cs
- ForceCopyBuildProvider.cs
- HttpDictionary.cs
- SocketElement.cs
- Matrix.cs
- Transform3D.cs
- CompoundFileStorageReference.cs
- GridViewSelectEventArgs.cs
- PackageDigitalSignatureManager.cs
- AnimatedTypeHelpers.cs
- SqlOuterApplyReducer.cs
- OwnerDrawPropertyBag.cs