NavigationPropertyAccessor.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 / DataEntity / System / Data / Metadata / Edm / NavigationPropertyAccessor.cs / 1305376 / NavigationPropertyAccessor.cs

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

using System; 
using System.Collections.Generic;
using System.Data.Common;
using System.Globalization;
using System.Text; 
using System.Threading;
 
namespace System.Data.Metadata.Edm 
{
    ///  
    /// Cached dynamic method to get the property value from a CLR instance
    /// 
    internal class NavigationPropertyAccessor
    { 
        #region Constructors
 
        public NavigationPropertyAccessor(string propertyName) 
        {
            _propertyName = propertyName; 
        }

        #endregion
 
        #region Fields
 
        private Func _memberGetter; 
        private Action _memberSetter;
        private Action _collectionAdd; 
        private Func _collectionRemove;
        private Func _collectionCreate;
        private readonly string _propertyName;
 
        #endregion
 
        #region Properties 

        public bool HasProperty 
        {
            get { return (_propertyName != null); }
        }
 
        public string PropertyName
        { 
            get { return _propertyName; } 
        }
 
        /// cached dynamic method to get the property value from a CLR instance
        public Func ValueGetter
        {
            get { return _memberGetter; } 
            set
            { 
                System.Diagnostics.Debug.Assert(null != value, "clearing ValueGetter"); 
                // It doesn't matter which delegate wins, but only one should be jitted
                Interlocked.CompareExchange(ref _memberGetter, value, null); 
            }
        }

        /// cached dynamic method to set the property value from a CLR instance 
        public Action ValueSetter
        { 
            get { return _memberSetter; } 
            set
            { 
                System.Diagnostics.Debug.Assert(null != value, "clearing ValueSetter");
                // It doesn't matter which delegate wins, but only one should be jitted
                Interlocked.CompareExchange(ref _memberSetter, value, null);
            } 
        }
 
        public Action CollectionAdd 
        {
            get { return _collectionAdd; } 
            set
            {
                System.Diagnostics.Debug.Assert(null != value, "clearing CollectionAdd");
                // It doesn't matter which delegate wins, but only one should be jitted 
                Interlocked.CompareExchange(ref _collectionAdd, value, null);
            } 
        } 

        public Func CollectionRemove 
        {
            get { return _collectionRemove; }
            set
            { 
                System.Diagnostics.Debug.Assert(null != value, "clearing CollectionRemove");
                // It doesn't matter which delegate wins, but only one should be jitted 
                Interlocked.CompareExchange(ref _collectionRemove, value, null); 
            }
        } 

        public Func CollectionCreate
        {
            get { return _collectionCreate; } 
            set
            { 
                System.Diagnostics.Debug.Assert(null != value, "clearing CollectionCreate"); 
                // It doesn't matter which delegate wins, but only one should be jitted
                Interlocked.CompareExchange(ref _collectionCreate, value, null); 
            }
        }

        #endregion 

        #region Static Properties 
 
        public static NavigationPropertyAccessor NoNavigationProperty
        { 
            get { return new NavigationPropertyAccessor(null); }
        }

        #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