Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntity / System / Data / Metadata / Edm / Provider / ClrProviderManifest.cs / 4 / ClrProviderManifest.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System.Collections.Generic;
using System.Data.Common;
using System.Diagnostics;
using System.Collections.ObjectModel;
using System.Threading;
using System.Linq;
namespace System.Data.Metadata.Edm
{
internal class ClrProviderManifest : DbProviderManifest
{
private const int s_PrimitiveTypeCount = 15;
private System.Collections.ObjectModel.ReadOnlyCollection _primitiveTypes;
private static ClrProviderManifest _instance = new ClrProviderManifest();
///
/// A private constructor to prevent other places from instantiating this class
///
private ClrProviderManifest()
{
}
///
/// Gets the EDM provider manifest singleton instance
///
internal static ClrProviderManifest Instance
{
get
{
return _instance;
}
}
///
/// Returns the namespace used by this provider manifest
///
public override string NamespaceName
{
get { return EdmConstants.ClrPrimitiveTypeNamespace; }
}
///
/// Returns the primitive type corresponding to the given CLR type
///
/// The CLR type for which the PrimitiveType object is retrieved
/// The retrieved primitive type
/// True if a primitive type is returned
internal bool TryGetPrimitiveType(Type clrType, out PrimitiveType primitiveType)
{
primitiveType = null;
InitializePrimitiveTypes();
for (int i = 0 ; i < _primitiveTypes.Count ; i++ )
{
if (_primitiveTypes[i].ClrEquivalentType.Equals(clrType))
{
primitiveType = _primitiveTypes[i];
return true;
}
}
return false;
}
///
/// Returns all the functions in this provider manifest
///
/// A collection of functions
public override System.Collections.ObjectModel.ReadOnlyCollection GetStoreFunctions()
{
return Helper.EmptyEdmFunctionReadOnlyCollection;
}
///
/// Returns all the FacetDescriptions for a particular type
///
/// the type to return FacetDescriptions for.
/// The FacetDescriptions for the type given.
public override System.Collections.ObjectModel.ReadOnlyCollection GetFacetDescriptions(EdmType type)
{
if (Helper.IsPrimitiveType(type) && ((PrimitiveType)type).DataSpace == DataSpace.OSpace)
{
// we don't have our own facets, just defer to the edm primitive type facets
PrimitiveType basePrimitive = (PrimitiveType)type.BaseType;
return basePrimitive.ProviderManifest.GetFacetDescriptions(basePrimitive);
}
return Helper.EmptyFacetDescriptionEnumerable;
}
///
/// Initializes all the primitive types
///
private void InitializePrimitiveTypes()
{
if (_primitiveTypes != null)
{
return;
}
PrimitiveType[] primitiveTypes = new PrimitiveType[s_PrimitiveTypeCount];
primitiveTypes[(int)PrimitiveTypeKind.Binary] = CreatePrimitiveType(typeof(Byte[]), PrimitiveTypeKind.Binary);
primitiveTypes[(int)PrimitiveTypeKind.Boolean] = CreatePrimitiveType(typeof(Boolean), PrimitiveTypeKind.Boolean);
primitiveTypes[(int)PrimitiveTypeKind.Byte] = CreatePrimitiveType(typeof(Byte), PrimitiveTypeKind.Byte);
primitiveTypes[(int)PrimitiveTypeKind.DateTime] = CreatePrimitiveType(typeof(DateTime), PrimitiveTypeKind.DateTime);
primitiveTypes[(int)PrimitiveTypeKind.Time] = CreatePrimitiveType(typeof(TimeSpan), PrimitiveTypeKind.Time);
primitiveTypes[(int)PrimitiveTypeKind.DateTimeOffset] = CreatePrimitiveType(typeof(DateTimeOffset), PrimitiveTypeKind.DateTimeOffset);
primitiveTypes[(int)PrimitiveTypeKind.Decimal] = CreatePrimitiveType(typeof(Decimal), PrimitiveTypeKind.Decimal);
primitiveTypes[(int)PrimitiveTypeKind.Double] = CreatePrimitiveType(typeof(Double), PrimitiveTypeKind.Double);
primitiveTypes[(int)PrimitiveTypeKind.Guid] = CreatePrimitiveType(typeof(Guid), PrimitiveTypeKind.Guid);
primitiveTypes[(int)PrimitiveTypeKind.Int16] = CreatePrimitiveType(typeof(Int16), PrimitiveTypeKind.Int16);
primitiveTypes[(int)PrimitiveTypeKind.Int32] = CreatePrimitiveType(typeof(Int32), PrimitiveTypeKind.Int32);
primitiveTypes[(int)PrimitiveTypeKind.Int64] = CreatePrimitiveType(typeof(Int64), PrimitiveTypeKind.Int64);
primitiveTypes[(int)PrimitiveTypeKind.SByte] = CreatePrimitiveType(typeof(SByte), PrimitiveTypeKind.SByte);
primitiveTypes[(int)PrimitiveTypeKind.Single] = CreatePrimitiveType(typeof(Single), PrimitiveTypeKind.Single);
primitiveTypes[(int)PrimitiveTypeKind.String] = CreatePrimitiveType(typeof(String), PrimitiveTypeKind.String);
for (int i = 0; i < primitiveTypes.Length; i++)
{
primitiveTypes[i].SetReadOnly();
}
System.Collections.ObjectModel.ReadOnlyCollection readOnlyTypes = new System.Collections.ObjectModel.ReadOnlyCollection(primitiveTypes);
// Set the result to _primitiveTypes at the end
Interlocked.CompareExchange>(ref _primitiveTypes, readOnlyTypes, null);
}
///
/// Initialize the primitive type with the given
///
/// The CLR type of this type
/// The primitive type kind of the primitive type
private PrimitiveType CreatePrimitiveType(Type clrType, PrimitiveTypeKind primitiveTypeKind)
{
// Figures out the base type
PrimitiveType baseType = MetadataItem.EdmProviderManifest.GetPrimitiveType(primitiveTypeKind);
PrimitiveType primitiveType = new PrimitiveType(clrType, baseType, this);
return primitiveType;
}
public override System.Collections.ObjectModel.ReadOnlyCollection GetStoreTypes()
{
InitializePrimitiveTypes();
return this._primitiveTypes;
}
public override TypeUsage GetEdmType(TypeUsage storeType)
{
throw new NotImplementedException();
}
public override TypeUsage GetStoreType(TypeUsage edmType)
{
throw new NotImplementedException();
}
///
/// Providers should override this to return information specific to their provider.
///
/// This method should never return null.
///
/// The name of the information to be retrieved.
/// An XmlReader at the begining of the information requested.
protected override System.Xml.XmlReader GetDbInformation(string informationType)
{
throw new NotImplementedException();
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System.Collections.Generic;
using System.Data.Common;
using System.Diagnostics;
using System.Collections.ObjectModel;
using System.Threading;
using System.Linq;
namespace System.Data.Metadata.Edm
{
internal class ClrProviderManifest : DbProviderManifest
{
private const int s_PrimitiveTypeCount = 15;
private System.Collections.ObjectModel.ReadOnlyCollection _primitiveTypes;
private static ClrProviderManifest _instance = new ClrProviderManifest();
///
/// A private constructor to prevent other places from instantiating this class
///
private ClrProviderManifest()
{
}
///
/// Gets the EDM provider manifest singleton instance
///
internal static ClrProviderManifest Instance
{
get
{
return _instance;
}
}
///
/// Returns the namespace used by this provider manifest
///
public override string NamespaceName
{
get { return EdmConstants.ClrPrimitiveTypeNamespace; }
}
///
/// Returns the primitive type corresponding to the given CLR type
///
/// The CLR type for which the PrimitiveType object is retrieved
/// The retrieved primitive type
/// True if a primitive type is returned
internal bool TryGetPrimitiveType(Type clrType, out PrimitiveType primitiveType)
{
primitiveType = null;
InitializePrimitiveTypes();
for (int i = 0 ; i < _primitiveTypes.Count ; i++ )
{
if (_primitiveTypes[i].ClrEquivalentType.Equals(clrType))
{
primitiveType = _primitiveTypes[i];
return true;
}
}
return false;
}
///
/// Returns all the functions in this provider manifest
///
/// A collection of functions
public override System.Collections.ObjectModel.ReadOnlyCollection GetStoreFunctions()
{
return Helper.EmptyEdmFunctionReadOnlyCollection;
}
///
/// Returns all the FacetDescriptions for a particular type
///
/// the type to return FacetDescriptions for.
/// The FacetDescriptions for the type given.
public override System.Collections.ObjectModel.ReadOnlyCollection GetFacetDescriptions(EdmType type)
{
if (Helper.IsPrimitiveType(type) && ((PrimitiveType)type).DataSpace == DataSpace.OSpace)
{
// we don't have our own facets, just defer to the edm primitive type facets
PrimitiveType basePrimitive = (PrimitiveType)type.BaseType;
return basePrimitive.ProviderManifest.GetFacetDescriptions(basePrimitive);
}
return Helper.EmptyFacetDescriptionEnumerable;
}
///
/// Initializes all the primitive types
///
private void InitializePrimitiveTypes()
{
if (_primitiveTypes != null)
{
return;
}
PrimitiveType[] primitiveTypes = new PrimitiveType[s_PrimitiveTypeCount];
primitiveTypes[(int)PrimitiveTypeKind.Binary] = CreatePrimitiveType(typeof(Byte[]), PrimitiveTypeKind.Binary);
primitiveTypes[(int)PrimitiveTypeKind.Boolean] = CreatePrimitiveType(typeof(Boolean), PrimitiveTypeKind.Boolean);
primitiveTypes[(int)PrimitiveTypeKind.Byte] = CreatePrimitiveType(typeof(Byte), PrimitiveTypeKind.Byte);
primitiveTypes[(int)PrimitiveTypeKind.DateTime] = CreatePrimitiveType(typeof(DateTime), PrimitiveTypeKind.DateTime);
primitiveTypes[(int)PrimitiveTypeKind.Time] = CreatePrimitiveType(typeof(TimeSpan), PrimitiveTypeKind.Time);
primitiveTypes[(int)PrimitiveTypeKind.DateTimeOffset] = CreatePrimitiveType(typeof(DateTimeOffset), PrimitiveTypeKind.DateTimeOffset);
primitiveTypes[(int)PrimitiveTypeKind.Decimal] = CreatePrimitiveType(typeof(Decimal), PrimitiveTypeKind.Decimal);
primitiveTypes[(int)PrimitiveTypeKind.Double] = CreatePrimitiveType(typeof(Double), PrimitiveTypeKind.Double);
primitiveTypes[(int)PrimitiveTypeKind.Guid] = CreatePrimitiveType(typeof(Guid), PrimitiveTypeKind.Guid);
primitiveTypes[(int)PrimitiveTypeKind.Int16] = CreatePrimitiveType(typeof(Int16), PrimitiveTypeKind.Int16);
primitiveTypes[(int)PrimitiveTypeKind.Int32] = CreatePrimitiveType(typeof(Int32), PrimitiveTypeKind.Int32);
primitiveTypes[(int)PrimitiveTypeKind.Int64] = CreatePrimitiveType(typeof(Int64), PrimitiveTypeKind.Int64);
primitiveTypes[(int)PrimitiveTypeKind.SByte] = CreatePrimitiveType(typeof(SByte), PrimitiveTypeKind.SByte);
primitiveTypes[(int)PrimitiveTypeKind.Single] = CreatePrimitiveType(typeof(Single), PrimitiveTypeKind.Single);
primitiveTypes[(int)PrimitiveTypeKind.String] = CreatePrimitiveType(typeof(String), PrimitiveTypeKind.String);
for (int i = 0; i < primitiveTypes.Length; i++)
{
primitiveTypes[i].SetReadOnly();
}
System.Collections.ObjectModel.ReadOnlyCollection readOnlyTypes = new System.Collections.ObjectModel.ReadOnlyCollection(primitiveTypes);
// Set the result to _primitiveTypes at the end
Interlocked.CompareExchange>(ref _primitiveTypes, readOnlyTypes, null);
}
///
/// Initialize the primitive type with the given
///
/// The CLR type of this type
/// The primitive type kind of the primitive type
private PrimitiveType CreatePrimitiveType(Type clrType, PrimitiveTypeKind primitiveTypeKind)
{
// Figures out the base type
PrimitiveType baseType = MetadataItem.EdmProviderManifest.GetPrimitiveType(primitiveTypeKind);
PrimitiveType primitiveType = new PrimitiveType(clrType, baseType, this);
return primitiveType;
}
public override System.Collections.ObjectModel.ReadOnlyCollection GetStoreTypes()
{
InitializePrimitiveTypes();
return this._primitiveTypes;
}
public override TypeUsage GetEdmType(TypeUsage storeType)
{
throw new NotImplementedException();
}
public override TypeUsage GetStoreType(TypeUsage edmType)
{
throw new NotImplementedException();
}
///
/// Providers should override this to return information specific to their provider.
///
/// This method should never return null.
///
/// The name of the information to be retrieved.
/// An XmlReader at the begining of the information requested.
protected override System.Xml.XmlReader GetDbInformation(string informationType)
{
throw new NotImplementedException();
}
}
}
// 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
- FilterElement.cs
- DatePickerTextBox.cs
- MailWebEventProvider.cs
- DataControlFieldHeaderCell.cs
- ExpressionBindings.cs
- ParsedAttributeCollection.cs
- WebHttpBindingElement.cs
- WindowPattern.cs
- ViewLoader.cs
- TdsParserStateObject.cs
- SecurityContext.cs
- CheckBox.cs
- OSFeature.cs
- RequestDescription.cs
- SizeValueSerializer.cs
- HttpContextServiceHost.cs
- StrokeCollection2.cs
- MobileListItemCollection.cs
- WSSecureConversationFeb2005.cs
- DbCommandTree.cs
- XmlImplementation.cs
- XmlSchemaAttribute.cs
- DataServiceException.cs
- PathSegment.cs
- SafeNativeMethods.cs
- PointAnimationBase.cs
- SettingsProperty.cs
- UrlMappingCollection.cs
- ToolStripHighContrastRenderer.cs
- ScalarOps.cs
- SecurityContext.cs
- XmlDocumentFragment.cs
- CacheEntry.cs
- WindowsFormsDesignerOptionService.cs
- DrawListViewSubItemEventArgs.cs
- IndexedEnumerable.cs
- PiiTraceSource.cs
- Decorator.cs
- CrossSiteScriptingValidation.cs
- SafeCoTaskMem.cs
- EventProviderWriter.cs
- ArraySet.cs
- Point4D.cs
- CachingHintValidation.cs
- DefaultObjectMappingItemCollection.cs
- FilteredAttributeCollection.cs
- SqlCommandBuilder.cs
- ControlCommandSet.cs
- EventHandlerList.cs
- DragEventArgs.cs
- PageAdapter.cs
- ClientBuildManager.cs
- ExtensionDataObject.cs
- NativeCompoundFileAPIs.cs
- NetNamedPipeBinding.cs
- Config.cs
- TdsValueSetter.cs
- FormParameter.cs
- UnsafeNativeMethodsPenimc.cs
- KeyEvent.cs
- UserControl.cs
- wgx_sdk_version.cs
- CryptographicAttribute.cs
- GridViewCancelEditEventArgs.cs
- LinqDataSourceValidationException.cs
- SHA384Managed.cs
- AttributeEmitter.cs
- ConnectionOrientedTransportChannelFactory.cs
- SiteMapDataSource.cs
- IListConverters.cs
- MouseGestureValueSerializer.cs
- DataExchangeServiceBinder.cs
- PreProcessor.cs
- HwndKeyboardInputProvider.cs
- PEFileEvidenceFactory.cs
- SchemaType.cs
- RootNamespaceAttribute.cs
- ListItemsCollectionEditor.cs
- TextClipboardData.cs
- ResXBuildProvider.cs
- CodeSubDirectory.cs
- ToolBar.cs
- EmbeddedMailObjectsCollection.cs
- DesignerAutoFormatCollection.cs
- ConnectorSelectionGlyph.cs
- OleDbInfoMessageEvent.cs
- RelationshipEnd.cs
- HtmlImage.cs
- IRCollection.cs
- PriorityBinding.cs
- ICspAsymmetricAlgorithm.cs
- ReferencedCollectionType.cs
- AssemblyInfo.cs
- precedingquery.cs
- TypeLibConverter.cs
- XmlMtomReader.cs
- CodePageEncoding.cs
- TraceLog.cs
- BitmapEffect.cs
- future.cs