ExtentKey.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntity / System / Data / Map / ViewGeneration / Validation / ExtentKey.cs / 1 / ExtentKey.cs

                            //---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// 
// @owner [....]
// @backupOwner [....] 
//--------------------------------------------------------------------- 

 
using System.Data.Common.Utils;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics; 
using System.Data.Metadata.Edm;
 
namespace System.Data.Mapping.ViewGeneration.Structures { 

    // This class represents the key of  constraint on values that a relation slot may have 
    internal class ExtentKey : InternalBase {

        #region Constructors
        // effects: Creates a key object for an extent (present in each MemberPath) 
        // with the fields corresponding to keyFields
        internal ExtentKey(IEnumerable keyFields) { 
            m_keyFields = new List(keyFields); 
        }
        #endregion 

        #region Fields
        // All the key fields in an entity set
        private List m_keyFields; 
        #endregion
 
        #region Properties 
        internal IEnumerable KeyFields {
            get { return m_keyFields; } 
        }
        #endregion

        #region Methods 
        // effects: Determines all the keys (unique and primary for
        // entityType) for entityType and returns a key. "prefix" gives the 
        // path of the extent or end of a relationship in a relationship set 
        // -- prefix is prepended to the entity's key fields to get the full memberpath
        internal static List GetKeysForEntityType(MemberPath prefix, EntityType entityType) { 
            // CHANGE_[....]_MULTIPLE_KEYS: currently there is a single key only. Need to support
            // keys inside complex types + unique keys
            ExtentKey key = GetPrimaryKeyForEntityType(prefix, entityType);
 
            List keys = new List();
            keys.Add(key); 
            return keys; 
        }
 
        // effects: Returns the key for entityType prefixed with prefix (for
        // its memberPath)
        internal static ExtentKey GetPrimaryKeyForEntityType(MemberPath prefix, EntityType entityType) {
            List keyFields = new List(); 
            foreach (EdmMember keyMember in entityType.KeyMembers) {
                Debug.Assert(keyMember != null, "Bogus key member in metadata"); 
                keyFields.Add(new MemberPath(prefix, keyMember)); 
            }
 
            // Just have one key for now
            ExtentKey key = new ExtentKey(keyFields);
            return key;
        } 

        // effects: Returns a key correspnding to all the fields in different 
        // ends of relationtype prefixed with "prefix" 
        internal static ExtentKey GetKeyForRelationType(MemberPath prefix, AssociationType relationType) {
            List keyFields = new List(); 

            foreach (AssociationEndMember endMember in relationType.AssociationEndMembers) {
                MemberPath endPrefix = new MemberPath(prefix, endMember);
                EntityType entityType = MetadataHelper.GetEntityTypeForEnd(endMember); 
                ExtentKey primaryKey = GetPrimaryKeyForEntityType(endPrefix, entityType);
                keyFields.AddRange(primaryKey.KeyFields); 
            } 
            ExtentKey key = new ExtentKey(keyFields);
            return key; 
        }

        internal string ToUserString() {
            string result = StringUtil.ToCommaSeparatedStringSorted(m_keyFields); 
            return result;
        } 
 
        internal override void ToCompactString(StringBuilder builder) {
            StringUtil.ToCommaSeparatedStringSorted(builder, m_keyFields); 
        }
        #endregion
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// 
// @owner [....]
// @backupOwner [....] 
//--------------------------------------------------------------------- 

 
using System.Data.Common.Utils;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics; 
using System.Data.Metadata.Edm;
 
namespace System.Data.Mapping.ViewGeneration.Structures { 

    // This class represents the key of  constraint on values that a relation slot may have 
    internal class ExtentKey : InternalBase {

        #region Constructors
        // effects: Creates a key object for an extent (present in each MemberPath) 
        // with the fields corresponding to keyFields
        internal ExtentKey(IEnumerable keyFields) { 
            m_keyFields = new List(keyFields); 
        }
        #endregion 

        #region Fields
        // All the key fields in an entity set
        private List m_keyFields; 
        #endregion
 
        #region Properties 
        internal IEnumerable KeyFields {
            get { return m_keyFields; } 
        }
        #endregion

        #region Methods 
        // effects: Determines all the keys (unique and primary for
        // entityType) for entityType and returns a key. "prefix" gives the 
        // path of the extent or end of a relationship in a relationship set 
        // -- prefix is prepended to the entity's key fields to get the full memberpath
        internal static List GetKeysForEntityType(MemberPath prefix, EntityType entityType) { 
            // CHANGE_[....]_MULTIPLE_KEYS: currently there is a single key only. Need to support
            // keys inside complex types + unique keys
            ExtentKey key = GetPrimaryKeyForEntityType(prefix, entityType);
 
            List keys = new List();
            keys.Add(key); 
            return keys; 
        }
 
        // effects: Returns the key for entityType prefixed with prefix (for
        // its memberPath)
        internal static ExtentKey GetPrimaryKeyForEntityType(MemberPath prefix, EntityType entityType) {
            List keyFields = new List(); 
            foreach (EdmMember keyMember in entityType.KeyMembers) {
                Debug.Assert(keyMember != null, "Bogus key member in metadata"); 
                keyFields.Add(new MemberPath(prefix, keyMember)); 
            }
 
            // Just have one key for now
            ExtentKey key = new ExtentKey(keyFields);
            return key;
        } 

        // effects: Returns a key correspnding to all the fields in different 
        // ends of relationtype prefixed with "prefix" 
        internal static ExtentKey GetKeyForRelationType(MemberPath prefix, AssociationType relationType) {
            List keyFields = new List(); 

            foreach (AssociationEndMember endMember in relationType.AssociationEndMembers) {
                MemberPath endPrefix = new MemberPath(prefix, endMember);
                EntityType entityType = MetadataHelper.GetEntityTypeForEnd(endMember); 
                ExtentKey primaryKey = GetPrimaryKeyForEntityType(endPrefix, entityType);
                keyFields.AddRange(primaryKey.KeyFields); 
            } 
            ExtentKey key = new ExtentKey(keyFields);
            return key; 
        }

        internal string ToUserString() {
            string result = StringUtil.ToCommaSeparatedStringSorted(m_keyFields); 
            return result;
        } 
 
        internal override void ToCompactString(StringBuilder builder) {
            StringUtil.ToCommaSeparatedStringSorted(builder, m_keyFields); 
        }
        #endregion
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK