Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Metadata / Edm / MetadataPropertyCollection.cs / 1305376 / MetadataPropertyCollection.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Data.Common; using System.Diagnostics; using System.Reflection; using System.Data.Common.Utils; namespace System.Data.Metadata.Edm { ////// Metadata collection class supporting delay-loading of system item attributes and /// extended attributes. /// internal sealed class MetadataPropertyCollection : MetadataCollection{ /// /// Constructor taking item. /// /// Item with which the collection is associated. internal MetadataPropertyCollection(MetadataItem item) : base(GetSystemMetadataProperties(item)) { } private readonly static Memoizers_itemTypeMemoizer = new Memoizer (clrType => new ItemTypeInformation(clrType), null); // Given an item, returns all system type attributes for the item. private static IEnumerable GetSystemMetadataProperties(MetadataItem item) { EntityUtil.CheckArgumentNull(item, "item"); Type type = item.GetType(); ItemTypeInformation itemTypeInformation = GetItemTypeInformation(type); return itemTypeInformation.GetItemAttributes(item); } // Retrieves metadata for type. private static ItemTypeInformation GetItemTypeInformation(Type clrType) { return s_itemTypeMemoizer.Evaluate(clrType); } /// /// Encapsulates information about system item attributes for a particular item type. /// private class ItemTypeInformation { ////// Retrieves system attribute information for the given type. /// Requires: type must derive from MetadataItem /// /// Type internal ItemTypeInformation(Type clrType) { Debug.Assert(null != clrType); _itemProperties = GetItemProperties(clrType); } private readonly List_itemProperties; // Returns system item attributes for the given item. internal IEnumerable GetItemAttributes(MetadataItem item) { foreach (ItemPropertyInfo propertyInfo in _itemProperties) { yield return propertyInfo.GetMetadataProperty(item); } } // Gets type information for item with the given type. Uses cached information where // available. private static List GetItemProperties(Type clrType) { List result = new List (); foreach (PropertyInfo propertyInfo in clrType.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) { foreach (MetadataPropertyAttribute attribute in propertyInfo.GetCustomAttributes( typeof(MetadataPropertyAttribute), false)) { result.Add(new ItemPropertyInfo(propertyInfo, attribute)); } } return result; } } /// /// Encapsulates information about a CLR property of an item class. /// private class ItemPropertyInfo { ////// Initialize information. /// Requires: attribute must belong to the given property. /// /// Property referenced. /// Attribute for the property. internal ItemPropertyInfo(PropertyInfo propertyInfo, MetadataPropertyAttribute attribute) { Debug.Assert(null != propertyInfo); Debug.Assert(null != attribute); _propertyInfo = propertyInfo; _attribute = attribute; } private readonly MetadataPropertyAttribute _attribute; private readonly PropertyInfo _propertyInfo; ////// Given an item, returns an instance of the item attribute described by this class. /// /// Item from which to retrieve attribute. ///Item attribute. internal MetadataProperty GetMetadataProperty(MetadataItem item) { return new MetadataProperty(_propertyInfo.Name, _attribute.Type, _attribute.IsCollectionType, new MetadataPropertyValue(_propertyInfo, item)); } } } } // 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
- NumericPagerField.cs
- MdiWindowListStrip.cs
- HGlobalSafeHandle.cs
- DoubleCollection.cs
- dbdatarecord.cs
- ResourceManager.cs
- ToolBarButtonClickEvent.cs
- ApplicationSettingsBase.cs
- SafeViewOfFileHandle.cs
- TransactionFlowOption.cs
- DesignTimeXamlWriter.cs
- ModuleBuilderData.cs
- Span.cs
- KeyboardNavigation.cs
- RichTextBoxConstants.cs
- jithelpers.cs
- ProfileModule.cs
- ProxyGenerator.cs
- QueryCacheEntry.cs
- DbDataReader.cs
- Identifier.cs
- ClientBuildManager.cs
- IntegrationExceptionEventArgs.cs
- ExternalException.cs
- BindableAttribute.cs
- MessageUtil.cs
- MsmqVerifier.cs
- CallbackDebugElement.cs
- ReadOnlyDictionary.cs
- PrivilegeNotHeldException.cs
- SqlRewriteScalarSubqueries.cs
- WebPartVerbsEventArgs.cs
- CapabilitiesUse.cs
- XamlHostingSection.cs
- XmlParser.cs
- XPathDocument.cs
- TraceLevelStore.cs
- ConnectionStringsExpressionBuilder.cs
- TrustLevel.cs
- ByteConverter.cs
- EventEntry.cs
- ProtocolsSection.cs
- LocalizationCodeDomSerializer.cs
- HttpWebRequestElement.cs
- SiteMapPath.cs
- XmlDomTextWriter.cs
- SqlServer2KCompatibilityAnnotation.cs
- GridViewColumnCollection.cs
- CallbackHandler.cs
- DataGridCommandEventArgs.cs
- UnsupportedPolicyOptionsException.cs
- ResourceWriter.cs
- ListItemCollection.cs
- SqlCharStream.cs
- CharacterBuffer.cs
- Deserializer.cs
- RsaSecurityTokenAuthenticator.cs
- Color.cs
- TraceSwitch.cs
- Int16.cs
- SerializerProvider.cs
- LookupNode.cs
- ParallelEnumerableWrapper.cs
- SqlDataSourceCache.cs
- Atom10FormatterFactory.cs
- GcHandle.cs
- CapabilitiesState.cs
- xsdvalidator.cs
- parserscommon.cs
- WebReferenceCollection.cs
- SelectionProviderWrapper.cs
- Package.cs
- Vector3DAnimationBase.cs
- ToolBar.cs
- NamespaceDisplay.xaml.cs
- PaperSource.cs
- ImpersonationContext.cs
- FlatButtonAppearance.cs
- KerberosSecurityTokenProvider.cs
- webproxy.cs
- SchemaImporterExtension.cs
- EntityContainer.cs
- XmlSchemaAttribute.cs
- UserPreferenceChangedEventArgs.cs
- ProcessInputEventArgs.cs
- DrawListViewSubItemEventArgs.cs
- SelectionEditingBehavior.cs
- Tile.cs
- ButtonField.cs
- ViewService.cs
- EdmFunctionAttribute.cs
- HybridDictionary.cs
- RegexStringValidator.cs
- Mappings.cs
- StreamInfo.cs
- StructuredTypeEmitter.cs
- QueryGeneratorBase.cs
- PasswordBoxAutomationPeer.cs
- EventListenerClientSide.cs
- XmlDataImplementation.cs