Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Renderer.cs
- SelectionGlyph.cs
- WebPartDeleteVerb.cs
- Baml2006Reader.cs
- ActivatableWorkflowsQueryResult.cs
- ConstrainedDataObject.cs
- Matrix3DValueSerializer.cs
- BindToObject.cs
- HierarchicalDataSourceDesigner.cs
- SqlDependencyUtils.cs
- StorageAssociationSetMapping.cs
- SelectedDatesCollection.cs
- InputDevice.cs
- MetadataItemSerializer.cs
- PopOutPanel.cs
- ModuleElement.cs
- TileBrush.cs
- DeferredBinaryDeserializerExtension.cs
- TrustManager.cs
- PathFigureCollectionConverter.cs
- RowUpdatingEventArgs.cs
- FileDialogPermission.cs
- EtwTrackingBehavior.cs
- ReflectionHelper.cs
- TransformGroup.cs
- CipherData.cs
- CacheHelper.cs
- DrawItemEvent.cs
- WindowsListViewGroupHelper.cs
- BatchParser.cs
- SimpleFileLog.cs
- DataControlCommands.cs
- OdbcDataReader.cs
- AnonymousIdentificationSection.cs
- ControlBuilder.cs
- TextBoxAutoCompleteSourceConverter.cs
- XmlQualifiedName.cs
- NativeMethods.cs
- Converter.cs
- RegexCapture.cs
- Constraint.cs
- TargetParameterCountException.cs
- DoubleStorage.cs
- ServiceTimeoutsElement.cs
- ViewGenerator.cs
- StrokeNodeOperations2.cs
- ProfileEventArgs.cs
- StyleTypedPropertyAttribute.cs
- ClickablePoint.cs
- QueryCacheEntry.cs
- UIElementPropertyUndoUnit.cs
- BackgroundWorker.cs
- ConcatQueryOperator.cs
- MapPathBasedVirtualPathProvider.cs
- FontStyleConverter.cs
- DataGridViewCellEventArgs.cs
- WSDualHttpBindingCollectionElement.cs
- TreePrinter.cs
- ValidatedControlConverter.cs
- FilterRepeater.cs
- SemaphoreFullException.cs
- WebEventTraceProvider.cs
- RepeaterItem.cs
- EventLogEntryCollection.cs
- ArgumentsParser.cs
- RegionInfo.cs
- StylusCaptureWithinProperty.cs
- indexingfiltermarshaler.cs
- TextElement.cs
- RootBrowserWindow.cs
- BlurEffect.cs
- MiniAssembly.cs
- DBNull.cs
- MenuCommandService.cs
- ICspAsymmetricAlgorithm.cs
- VectorCollectionConverter.cs
- HebrewNumber.cs
- XmlNamespaceMapping.cs
- webeventbuffer.cs
- CodeTypeDelegate.cs
- CompositeControl.cs
- Table.cs
- WebPartTransformer.cs
- ContentDisposition.cs
- CriticalExceptions.cs
- EntityDataSourceWizardForm.cs
- ItemContainerGenerator.cs
- basemetadatamappingvisitor.cs
- BoundPropertyEntry.cs
- StateMachine.cs
- SqlRecordBuffer.cs
- NameTable.cs
- TdsEnums.cs
- SyndicationCategory.cs
- WebPart.cs
- ComponentConverter.cs
- StylusButtonCollection.cs
- NativeMethods.cs
- TCPListener.cs
- InvalidEnumArgumentException.cs