/// <summary>
        ///     Releases unmanaged and - optionally - managed resources.
        /// </summary>
        /// <param name="disposing">
        ///     <c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.
        /// </param>
        protected virtual void Dispose(bool disposing)
        {
            if (!_disposed)
            {
                if (_isOwnerContext)
                {
                    /////
                    // This class is the owner so free the context data
                    /////
                    CallContext.FreeNamedDataSlot(SourceEntityContextKey);
                }

                _contextData = null;

                _disposed = true;
            }
        }
        /// <summary>
        ///     Initializes a new instance of the <see cref="SourceEntityContext" /> class.
        /// </summary>
        public SourceEntityContext( )
        {
            /////
            // Check the context for a current entity snapshot data
            /////
            _contextData = CallContext.LogicalGetData(SourceEntityContextKey) as SourceEntityContextData;

            if (_contextData == null)
            {
                /////
                // No current context found so create one.
                /////
                _contextData    = new SourceEntityContextData( );
                _isOwnerContext = true;

                CallContext.LogicalSetData(SourceEntityContextKey, _contextData);
            }
        }