Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntity / System / Data / Metadata / Edm / ComplexType.cs / 2 / ComplexType.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....], [....]
//---------------------------------------------------------------------
using System.Data.Common;
using System.Threading;
using System.Diagnostics;
namespace System.Data.Metadata.Edm
{
///
/// Represent the Edm Complex Type
///
public class ComplexType : StructuralType
{
#region Constructors
///
/// Initializes a new instance of Complex Type with the given properties
///
/// The name of the complex type
/// The namespace name of the type
/// The version of this type
/// dataSpace in which this ComplexType belongs to
/// If either name, namespace or version arguments are null
internal ComplexType(string name, string namespaceName, DataSpace dataSpace)
: base(name, namespaceName, dataSpace)
{
}
///
/// Initializes a new instance of Complex Type - required for bootstraping code
///
internal ComplexType()
{
// No initialization of item attributes in here, it's used as a pass thru in the case for delay population
// of item attributes
}
#endregion
#region Fields
private ReadOnlyMetadataCollection _properties;
#endregion
#region Properties
///
/// Returns the kind of the type
///
public override BuiltInTypeKind BuiltInTypeKind { get { return BuiltInTypeKind.ComplexType; } }
///
/// Returns just the properties from the collection
/// of members on this type
///
public ReadOnlyMetadataCollection Properties
{
get
{
Debug.Assert(IsReadOnly, "this is a wrapper around this.Members, don't call it during metadata loading, only call it after the metadata is set to readonly");
if (null == _properties)
{
Interlocked.CompareExchange(ref _properties,
new FilteredReadOnlyMetadataCollection(
this.Members, Helper.IsEdmProperty), null);
}
return _properties;
}
}
#endregion
#region Methods
///
/// Validates a EdmMember object to determine if it can be added to this type's
/// Members collection. If this method returns without throwing, it is assumed
/// the member is valid.
///
/// The member to validate
/// Thrown if the member is not a EdmProperty
internal override void ValidateMemberForAdd(EdmMember member)
{
if (!Helper.IsEdmProperty(member) && !Helper.IsNavigationProperty(member))
{
throw EntityUtil.ComplexTypeInvalidMembers();
}
}
#endregion
}
internal sealed class ClrComplexType : ComplexType
{
/// cached CLR type handle, allowing the Type reference to be GC'd
private readonly System.RuntimeTypeHandle _type;
/// cached dynamic method to construct a CLR instance
private Delegate _constructor;
private readonly string _cspaceTypeName;
///
/// Initializes a new instance of Complex Type with properties from the type.
///
/// The CLR type to construct from
internal ClrComplexType(Type clrType, string cspaceNamespaceName, string cspaceTypeName)
: base(EntityUtil.GenericCheckArgumentNull(clrType, "clrType").Name, clrType.Namespace ?? string.Empty,
DataSpace.OSpace)
{
System.Diagnostics.Debug.Assert(!String.IsNullOrEmpty(cspaceNamespaceName) &&
!String.IsNullOrEmpty(cspaceTypeName), "Mapping information must never be null");
_type = clrType.TypeHandle;
_cspaceTypeName = cspaceNamespaceName + "." + cspaceTypeName;
this.Abstract = clrType.IsAbstract;
}
internal static ClrComplexType CreateReadonlyClrComplexType(Type clrType, string cspaceNamespaceName, string cspaceTypeName)
{
ClrComplexType type = new ClrComplexType(clrType, cspaceNamespaceName, cspaceTypeName);
type.SetReadOnly();
return type;
}
/// cached dynamic method to construct a CLR instance
internal Delegate Constructor
{
get { return _constructor; }
set
{
// It doesn't matter which delegate wins, but only one should be jitted
Interlocked.CompareExchange(ref _constructor, value, null);
}
}
///
///
internal override System.Type ClrType
{
get { return Type.GetTypeFromHandle(_type); }
}
internal string CSpaceTypeName { get { return _cspaceTypeName; } }
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....], [....]
//---------------------------------------------------------------------
using System.Data.Common;
using System.Threading;
using System.Diagnostics;
namespace System.Data.Metadata.Edm
{
///
/// Represent the Edm Complex Type
///
public class ComplexType : StructuralType
{
#region Constructors
///
/// Initializes a new instance of Complex Type with the given properties
///
/// The name of the complex type
/// The namespace name of the type
/// The version of this type
/// dataSpace in which this ComplexType belongs to
/// If either name, namespace or version arguments are null
internal ComplexType(string name, string namespaceName, DataSpace dataSpace)
: base(name, namespaceName, dataSpace)
{
}
///
/// Initializes a new instance of Complex Type - required for bootstraping code
///
internal ComplexType()
{
// No initialization of item attributes in here, it's used as a pass thru in the case for delay population
// of item attributes
}
#endregion
#region Fields
private ReadOnlyMetadataCollection _properties;
#endregion
#region Properties
///
/// Returns the kind of the type
///
public override BuiltInTypeKind BuiltInTypeKind { get { return BuiltInTypeKind.ComplexType; } }
///
/// Returns just the properties from the collection
/// of members on this type
///
public ReadOnlyMetadataCollection Properties
{
get
{
Debug.Assert(IsReadOnly, "this is a wrapper around this.Members, don't call it during metadata loading, only call it after the metadata is set to readonly");
if (null == _properties)
{
Interlocked.CompareExchange(ref _properties,
new FilteredReadOnlyMetadataCollection(
this.Members, Helper.IsEdmProperty), null);
}
return _properties;
}
}
#endregion
#region Methods
///
/// Validates a EdmMember object to determine if it can be added to this type's
/// Members collection. If this method returns without throwing, it is assumed
/// the member is valid.
///
/// The member to validate
/// Thrown if the member is not a EdmProperty
internal override void ValidateMemberForAdd(EdmMember member)
{
if (!Helper.IsEdmProperty(member) && !Helper.IsNavigationProperty(member))
{
throw EntityUtil.ComplexTypeInvalidMembers();
}
}
#endregion
}
internal sealed class ClrComplexType : ComplexType
{
/// cached CLR type handle, allowing the Type reference to be GC'd
private readonly System.RuntimeTypeHandle _type;
/// cached dynamic method to construct a CLR instance
private Delegate _constructor;
private readonly string _cspaceTypeName;
///
/// Initializes a new instance of Complex Type with properties from the type.
///
/// The CLR type to construct from
internal ClrComplexType(Type clrType, string cspaceNamespaceName, string cspaceTypeName)
: base(EntityUtil.GenericCheckArgumentNull(clrType, "clrType").Name, clrType.Namespace ?? string.Empty,
DataSpace.OSpace)
{
System.Diagnostics.Debug.Assert(!String.IsNullOrEmpty(cspaceNamespaceName) &&
!String.IsNullOrEmpty(cspaceTypeName), "Mapping information must never be null");
_type = clrType.TypeHandle;
_cspaceTypeName = cspaceNamespaceName + "." + cspaceTypeName;
this.Abstract = clrType.IsAbstract;
}
internal static ClrComplexType CreateReadonlyClrComplexType(Type clrType, string cspaceNamespaceName, string cspaceTypeName)
{
ClrComplexType type = new ClrComplexType(clrType, cspaceNamespaceName, cspaceTypeName);
type.SetReadOnly();
return type;
}
/// cached dynamic method to construct a CLR instance
internal Delegate Constructor
{
get { return _constructor; }
set
{
// It doesn't matter which delegate wins, but only one should be jitted
Interlocked.CompareExchange(ref _constructor, value, null);
}
}
///
///
internal override System.Type ClrType
{
get { return Type.GetTypeFromHandle(_type); }
}
internal string CSpaceTypeName { get { return _cspaceTypeName; } }
}
}
// 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
- PriorityBindingExpression.cs
- UIElement3D.cs
- SessionStateSection.cs
- SecurityTokenSerializer.cs
- CodeTypeParameterCollection.cs
- XPathParser.cs
- ContextCorrelationInitializer.cs
- IisTraceWebEventProvider.cs
- XmlnsCache.cs
- ExpressionList.cs
- ColorContext.cs
- ThemeableAttribute.cs
- Geometry.cs
- _Win32.cs
- XPathException.cs
- ConfigurationManagerHelperFactory.cs
- XmlCharacterData.cs
- querybuilder.cs
- TextBoxAutoCompleteSourceConverter.cs
- BufferedGraphicsContext.cs
- SiteMapDataSource.cs
- DeviceFilterDictionary.cs
- PipelineModuleStepContainer.cs
- InvalidProgramException.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- DefaultAuthorizationContext.cs
- IISUnsafeMethods.cs
- RegexWorker.cs
- Domain.cs
- QueryOptionExpression.cs
- TreeNodeCollectionEditor.cs
- Int32AnimationUsingKeyFrames.cs
- Models.cs
- DemultiplexingDispatchMessageFormatter.cs
- HttpInputStream.cs
- TextRunCache.cs
- AppDomainShutdownMonitor.cs
- OleDbParameterCollection.cs
- FixedSOMPageConstructor.cs
- Quad.cs
- XMLUtil.cs
- AutomationAttributeInfo.cs
- SplitterPanel.cs
- ControlAdapter.cs
- ConfigurationSectionCollection.cs
- BitStack.cs
- COM2PictureConverter.cs
- TextBoxBase.cs
- TokenBasedSet.cs
- ScriptControlDescriptor.cs
- IgnoreSectionHandler.cs
- ChannelSinkStacks.cs
- SQLInt16.cs
- ItemDragEvent.cs
- IApplicationTrustManager.cs
- HashRepartitionEnumerator.cs
- ObjectAnimationBase.cs
- Int16.cs
- BasicDesignerLoader.cs
- SizeF.cs
- SystemIPInterfaceProperties.cs
- FontStyleConverter.cs
- DataGridViewCellLinkedList.cs
- SafeMarshalContext.cs
- DeviceContext2.cs
- LinkTarget.cs
- ClientSettingsProvider.cs
- DrawingImage.cs
- NoClickablePointException.cs
- CodeThrowExceptionStatement.cs
- HttpMethodConstraint.cs
- PartBasedPackageProperties.cs
- SqlNodeTypeOperators.cs
- SafeMemoryMappedViewHandle.cs
- NodeLabelEditEvent.cs
- OdbcFactory.cs
- GB18030Encoding.cs
- PopupEventArgs.cs
- TextModifierScope.cs
- XamlParser.cs
- OperationParameterInfo.cs
- WindowsStreamSecurityElement.cs
- COM2IDispatchConverter.cs
- WebServiceHostFactory.cs
- SQLBytes.cs
- SqlBuilder.cs
- mansign.cs
- RectKeyFrameCollection.cs
- AuthStoreRoleProvider.cs
- UnsafeNativeMethods.cs
- SystemFonts.cs
- TraceContextEventArgs.cs
- EventListener.cs
- Listbox.cs
- SizeIndependentAnimationStorage.cs
- Stopwatch.cs
- ShaderEffect.cs
- DynamicPropertyHolder.cs
- Context.cs
- ReceiveContextCollection.cs