LinkDescriptor.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataWeb / Client / System / Data / Services / Client / LinkDescriptor.cs / 1305376 / LinkDescriptor.cs

                            //---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//  
// represents the association between two entities
//  
//--------------------------------------------------------------------- 

namespace System.Data.Services.Client 
{
    using System.Diagnostics;

    ///  
    /// represents the association between two entities
    ///  
    [DebuggerDisplay("State = {state}")] 
    public sealed class LinkDescriptor : Descriptor
    { 
        #region Fields

        /// equivalence comparer
        internal static readonly System.Collections.Generic.IEqualityComparer EquivalenceComparer = new Equivalent(); 

        /// source entity 
        private object source; 

        /// name of property on source entity that references the target entity 
        private string sourceProperty;

        /// target entity
        private object target; 

        #endregion 
 
        /// 
        /// Constructor 
        /// 
        /// Source entity
        /// Navigation property on the source entity
        /// Target entity 
        internal LinkDescriptor(object source, string sourceProperty, object target)
            : this(source, sourceProperty, target,  EntityStates.Unchanged) 
        { 
        }
 
        /// 
        /// Constructor
        /// 
        /// Source entity 
        /// Navigation property on the source entity
        /// Target entity 
        /// The link state 
        internal LinkDescriptor(object source, string sourceProperty, object target, EntityStates state)
            : base(state) 
        {
            this.source = source;
            this.sourceProperty = sourceProperty;
            this.target = target; 
        }
 
#region Public Properties 

        /// target entity 
        public object Target
        {
            get { return this.target; }
        } 

        /// source entity 
        public object Source 
        {
            get { return this.source; } 
        }

        /// name of property on source entity that references the target entity
        public string SourceProperty 
        {
            get { return this.sourceProperty; } 
        } 

#endregion 

        /// this is a link
        internal override bool IsResource
        { 
            get { return false; }
        } 
 
        /// 
        /// If the current instance of link descriptor is equivalent to the parameters supplied 
        /// 
        /// The source entity
        /// The source property name
        /// The target entity 
        /// true if equivalent
        internal bool IsEquivalent(object src, string srcPropName, object targ) 
        { 
            return (this.source == src &&
                this.target == targ && 
                this.sourceProperty == srcPropName);
        }

        /// equivalence comparer 
        private sealed class Equivalent : System.Collections.Generic.IEqualityComparer
        { 
            /// are two LinkDescriptors equivalent, ignore state 
            /// link descriptor x
            /// link descriptor y 
            /// true if equivalent
            public bool Equals(LinkDescriptor x, LinkDescriptor y)
            {
                return (null != x) && (null != y) && x.IsEquivalent(y.source, y.sourceProperty, y.target); 
            }
 
            /// compute hashcode for LinkDescriptor 
            /// link descriptor
            /// hashcode 
            public int GetHashCode(LinkDescriptor obj)
            {
                return (null != obj) ? (obj.Source.GetHashCode() ^ ((null != obj.Target) ? obj.Target.GetHashCode() : 0) ^ obj.SourceProperty.GetHashCode()) : 0;
            } 
        }
    } 
} 

// 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