Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntity / System / Data / Metadata / Edm / RowType.cs / 1 / RowType.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....], [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Globalization; using System.Data.Common; using System.Text; using System.Data.Objects.ELinq; using System.Threading; using System.Diagnostics; namespace System.Data.Metadata.Edm { ////// Represents the Edm Row Type /// public sealed class RowType : StructuralType { private ReadOnlyMetadataCollection_properties; private readonly InitializerMetadata _initializerMetadata; #region Constructors /// /// Initializes a new instance of RowType class with the given list of members /// /// properties for this row type ///Thrown if any individual property in the passed in properties argument is null internal RowType(IEnumerableproperties) : this(properties, null) { } /// /// Initializes a RowType with the given members and initializer metadata /// internal RowType(IEnumerableproperties, InitializerMetadata initializerMetadata) : base(GetRowTypeIdentityFromProperties(CheckProperties(properties), initializerMetadata), EdmConstants.TransientNamespace, (DataSpace)(-1)) { // Initialize the properties. if (null != properties) { foreach (EdmProperty property in properties) { this.AddProperty(property); } } _initializerMetadata = initializerMetadata; // Row types are immutable, so now that we're done initializing, set it // to be read-only. SetReadOnly(); } #endregion #region Properties /// /// Gets or sets LINQ initializer Metadata for this row type. If there is no associated /// initializer type, value is null. /// internal InitializerMetadata InitializerMetadata { get { return _initializerMetadata; } } ////// Returns the kind of the type /// public override BuiltInTypeKind BuiltInTypeKind { get { return BuiltInTypeKind.RowType; } } ////// Returns the list of properties for this row type /// ////// 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; } } /// /// Adds a property /// /// The property to add private void AddProperty(EdmProperty property) { EntityUtil.GenericCheckArgumentNull(property, "property"); AddMember(property); } ////// 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)) { throw EntityUtil.RowTypeInvalidMembers(); } } ////// Calculates the row type identity that would result from /// a given set of properties. /// /// The properties that determine the row type's structure /// Metadata describing materialization of this row type ///A string that identifies the row type private static string GetRowTypeIdentityFromProperties(IEnumerableproperties, InitializerMetadata initializerMetadata) { // The row type identity is formed as follows: // "rowtype[" + a comma-separated list of property identities + "]" StringBuilder identity = new StringBuilder("rowtype["); if (null != properties) { int i = 0; // For each property, append the type name and facets. foreach (EdmProperty property in properties) { if (i > 0) { identity.Append(","); } identity.Append("("); identity.Append(property.Name); identity.Append(","); property.TypeUsage.BuildIdentity(identity); identity.Append(")"); i++; } } identity.Append("]"); if (null != initializerMetadata) { identity.Append(",").Append(initializerMetadata.Identity); } return identity.ToString(); } private static IEnumerable CheckProperties(IEnumerable properties) { if (null != properties) { int i = 0; foreach (EdmProperty prop in properties) { if (prop == null) { throw EntityUtil.CollectionParameterElementIsNull("properties"); } i++; } /* if (i < 1) { throw EntityUtil.ArgumentOutOfRange("properties"); } */ } return properties; } #endregion #region Methods /// /// EdmEquals override verifying the equivalence of all members and their type usages. /// /// ///internal override bool EdmEquals(MetadataItem item) { // short-circuit if this and other are reference equivalent if (Object.ReferenceEquals(this, item)) { return true; } // check type of item if (null == item || BuiltInTypeKind.RowType != item.BuiltInTypeKind) { return false; } RowType other = (RowType)item; // check each row type has the same number of members if (this.Members.Count != other.Members.Count) { return false; } // verify all members are equivalent for (int ordinal = 0; ordinal < this.Members.Count; ordinal++) { EdmMember thisMember = this.Members[ordinal]; EdmMember otherMember = other.Members[ordinal]; // if members are different, return false if (!thisMember.EdmEquals(otherMember) || !thisMember.TypeUsage.EdmEquals(otherMember.TypeUsage)) { return false; } } return true; } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....], [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Globalization; using System.Data.Common; using System.Text; using System.Data.Objects.ELinq; using System.Threading; using System.Diagnostics; namespace System.Data.Metadata.Edm { ////// Represents the Edm Row Type /// public sealed class RowType : StructuralType { private ReadOnlyMetadataCollection_properties; private readonly InitializerMetadata _initializerMetadata; #region Constructors /// /// Initializes a new instance of RowType class with the given list of members /// /// properties for this row type ///Thrown if any individual property in the passed in properties argument is null internal RowType(IEnumerableproperties) : this(properties, null) { } /// /// Initializes a RowType with the given members and initializer metadata /// internal RowType(IEnumerableproperties, InitializerMetadata initializerMetadata) : base(GetRowTypeIdentityFromProperties(CheckProperties(properties), initializerMetadata), EdmConstants.TransientNamespace, (DataSpace)(-1)) { // Initialize the properties. if (null != properties) { foreach (EdmProperty property in properties) { this.AddProperty(property); } } _initializerMetadata = initializerMetadata; // Row types are immutable, so now that we're done initializing, set it // to be read-only. SetReadOnly(); } #endregion #region Properties /// /// Gets or sets LINQ initializer Metadata for this row type. If there is no associated /// initializer type, value is null. /// internal InitializerMetadata InitializerMetadata { get { return _initializerMetadata; } } ////// Returns the kind of the type /// public override BuiltInTypeKind BuiltInTypeKind { get { return BuiltInTypeKind.RowType; } } ////// Returns the list of properties for this row type /// ////// 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; } } /// /// Adds a property /// /// The property to add private void AddProperty(EdmProperty property) { EntityUtil.GenericCheckArgumentNull(property, "property"); AddMember(property); } ////// 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)) { throw EntityUtil.RowTypeInvalidMembers(); } } ////// Calculates the row type identity that would result from /// a given set of properties. /// /// The properties that determine the row type's structure /// Metadata describing materialization of this row type ///A string that identifies the row type private static string GetRowTypeIdentityFromProperties(IEnumerableproperties, InitializerMetadata initializerMetadata) { // The row type identity is formed as follows: // "rowtype[" + a comma-separated list of property identities + "]" StringBuilder identity = new StringBuilder("rowtype["); if (null != properties) { int i = 0; // For each property, append the type name and facets. foreach (EdmProperty property in properties) { if (i > 0) { identity.Append(","); } identity.Append("("); identity.Append(property.Name); identity.Append(","); property.TypeUsage.BuildIdentity(identity); identity.Append(")"); i++; } } identity.Append("]"); if (null != initializerMetadata) { identity.Append(",").Append(initializerMetadata.Identity); } return identity.ToString(); } private static IEnumerable CheckProperties(IEnumerable properties) { if (null != properties) { int i = 0; foreach (EdmProperty prop in properties) { if (prop == null) { throw EntityUtil.CollectionParameterElementIsNull("properties"); } i++; } /* if (i < 1) { throw EntityUtil.ArgumentOutOfRange("properties"); } */ } return properties; } #endregion #region Methods /// /// EdmEquals override verifying the equivalence of all members and their type usages. /// /// ///internal override bool EdmEquals(MetadataItem item) { // short-circuit if this and other are reference equivalent if (Object.ReferenceEquals(this, item)) { return true; } // check type of item if (null == item || BuiltInTypeKind.RowType != item.BuiltInTypeKind) { return false; } RowType other = (RowType)item; // check each row type has the same number of members if (this.Members.Count != other.Members.Count) { return false; } // verify all members are equivalent for (int ordinal = 0; ordinal < this.Members.Count; ordinal++) { EdmMember thisMember = this.Members[ordinal]; EdmMember otherMember = other.Members[ordinal]; // if members are different, return false if (!thisMember.EdmEquals(otherMember) || !thisMember.TypeUsage.EdmEquals(otherMember.TypeUsage)) { return false; } } return true; } #endregion } } // 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
- ProtocolsConfigurationHandler.cs
- Figure.cs
- AuthenticationModuleElement.cs
- HttpDictionary.cs
- MemoryMappedFileSecurity.cs
- OleDbRowUpdatingEvent.cs
- Math.cs
- DataGridItemCollection.cs
- MimeMapping.cs
- ListViewItemEventArgs.cs
- CodeTypeReferenceCollection.cs
- MenuAutomationPeer.cs
- CapabilitiesSection.cs
- DataGridViewRowCancelEventArgs.cs
- RectConverter.cs
- StyleReferenceConverter.cs
- DataGridViewHitTestInfo.cs
- prefixendpointaddressmessagefiltertable.cs
- DisposableCollectionWrapper.cs
- ForceCopyBuildProvider.cs
- WebException.cs
- SystemNetHelpers.cs
- PageContentCollection.cs
- DataSpaceManager.cs
- DataGridLength.cs
- CompositeActivityMarkupSerializer.cs
- Translator.cs
- DelegatedStream.cs
- DBBindings.cs
- TypeConverterHelper.cs
- DoubleSumAggregationOperator.cs
- CompiledQuery.cs
- CompModSwitches.cs
- DesignerUtility.cs
- __Error.cs
- ResizeBehavior.cs
- DomNameTable.cs
- WorkflowInstanceExtensionProvider.cs
- QilTypeChecker.cs
- WebBrowserBase.cs
- ConnectionAcceptor.cs
- DataError.cs
- RuntimeHelpers.cs
- StateDesignerConnector.cs
- Part.cs
- MruCache.cs
- StrokeCollectionDefaultValueFactory.cs
- RemotingHelper.cs
- EditorAttribute.cs
- PathFigureCollectionValueSerializer.cs
- DataGridTableCollection.cs
- Literal.cs
- MemberMaps.cs
- MiniLockedBorderGlyph.cs
- XmlSchemaAny.cs
- MenuItemAutomationPeer.cs
- CounterSample.cs
- LockCookie.cs
- CompoundFileStreamReference.cs
- WindowsServiceCredential.cs
- CultureInfoConverter.cs
- EdmConstants.cs
- Graph.cs
- ResourceDescriptionAttribute.cs
- SHA256Managed.cs
- DiffuseMaterial.cs
- DbConnectionPoolOptions.cs
- CompositeKey.cs
- PngBitmapEncoder.cs
- XamlVector3DCollectionSerializer.cs
- UIElementIsland.cs
- SqlNodeTypeOperators.cs
- ItemCollectionEditor.cs
- SubpageParagraph.cs
- DataGridViewComboBoxColumn.cs
- PhysicalOps.cs
- RulePatternOps.cs
- HttpConfigurationContext.cs
- ParameterRetriever.cs
- DrawingGroup.cs
- CommonXSendMessage.cs
- SHA1.cs
- MissingManifestResourceException.cs
- TableHeaderCell.cs
- XmlUtil.cs
- NameSpaceExtractor.cs
- RijndaelCryptoServiceProvider.cs
- _ListenerAsyncResult.cs
- X500Name.cs
- XamlInterfaces.cs
- ResXDataNode.cs
- DbConnectionPoolOptions.cs
- DataGridCommandEventArgs.cs
- EmptyImpersonationContext.cs
- DesignerDataConnection.cs
- SetterBaseCollection.cs
- SessionStateUtil.cs
- MessageSmuggler.cs
- EllipticalNodeOperations.cs
- MultiTargetingUtil.cs