Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Metadata / Edm / ComplexType.cs / 1305376 / ComplexType.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- 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 ReadOnlyMetadataCollectionProperties { 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) { Debug.Assert(Helper.IsEdmProperty(member) || Helper.IsNavigationProperty(member), "Only members of type Property may be added to ComplexType."); } #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 [....] // @backupOwner [....] //--------------------------------------------------------------------- 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 ReadOnlyMetadataCollectionProperties { 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) { Debug.Assert(Helper.IsEdmProperty(member) || Helper.IsNavigationProperty(member), "Only members of type Property may be added to ComplexType."); } #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
- WebPartsSection.cs
- SqlDataSourceFilteringEventArgs.cs
- SqlUserDefinedTypeAttribute.cs
- RemoteArgument.cs
- CompositeCollectionView.cs
- RecommendedAsConfigurableAttribute.cs
- WindowHideOrCloseTracker.cs
- DbConnectionHelper.cs
- ImmutableObjectAttribute.cs
- EntityConnectionStringBuilderItem.cs
- XPathEmptyIterator.cs
- DataGridViewCellStyleChangedEventArgs.cs
- Literal.cs
- XmlSchemaAnyAttribute.cs
- DateTimeFormatInfoScanner.cs
- CompiledELinqQueryState.cs
- WebHttpSecurityModeHelper.cs
- CustomUserNameSecurityTokenAuthenticator.cs
- TransactedBatchingElement.cs
- LogLogRecord.cs
- SpellCheck.cs
- SQLGuid.cs
- BindingCompleteEventArgs.cs
- PropertyItemInternal.cs
- TreeNodeCollection.cs
- ButtonFieldBase.cs
- NumericUpDown.cs
- PackageRelationshipCollection.cs
- RenderingBiasValidation.cs
- SettingsContext.cs
- LassoSelectionBehavior.cs
- ConfigXmlText.cs
- NumericExpr.cs
- SmiRecordBuffer.cs
- InputBuffer.cs
- EditorZoneBase.cs
- WindowManager.cs
- ViewStateException.cs
- FtpCachePolicyElement.cs
- updateconfighost.cs
- DiscoveryDocumentReference.cs
- PixelFormatConverter.cs
- FragmentNavigationEventArgs.cs
- PerformanceCounterManager.cs
- TextFormatter.cs
- TextEditorThreadLocalStore.cs
- contentDescriptor.cs
- SqlDataSourceCustomCommandEditor.cs
- PageSettings.cs
- HierarchicalDataBoundControl.cs
- DataProtection.cs
- SettingsPropertyValueCollection.cs
- SafeHandles.cs
- FieldValue.cs
- RadioButtonList.cs
- ResXBuildProvider.cs
- HtmlInputText.cs
- GenerateScriptTypeAttribute.cs
- CodeSnippetExpression.cs
- WebBrowserPermission.cs
- DataGridViewRowHeightInfoPushedEventArgs.cs
- TdsEnums.cs
- ListItemViewControl.cs
- OrthographicCamera.cs
- TableLayoutSettingsTypeConverter.cs
- ConstantSlot.cs
- ProfilePropertyMetadata.cs
- GlyphShapingProperties.cs
- ActionFrame.cs
- EntityConnectionStringBuilder.cs
- AutomationPropertyInfo.cs
- FontNamesConverter.cs
- PasswordRecovery.cs
- __TransparentProxy.cs
- HistoryEventArgs.cs
- WinFormsUtils.cs
- XamlClipboardData.cs
- HttpListenerRequest.cs
- ValidationErrorInfo.cs
- ReadOnlyDataSourceView.cs
- OleDbConnectionFactory.cs
- safesecurityhelperavalon.cs
- DesignOnlyAttribute.cs
- ResourceKey.cs
- CompilerLocalReference.cs
- AsyncOperation.cs
- CodeLinePragma.cs
- UserPreferenceChangedEventArgs.cs
- RC2CryptoServiceProvider.cs
- TablePattern.cs
- DataGrid.cs
- PathSegment.cs
- TypeHelper.cs
- IISMapPath.cs
- StructureChangedEventArgs.cs
- KeyTimeConverter.cs
- DayRenderEvent.cs
- HTTPNotFoundHandler.cs
- TraceHandlerErrorFormatter.cs
- ComplusTypeValidator.cs