RecordConverter.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Map / Update / Internal / RecordConverter.cs / 1305376 / RecordConverter.cs

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

using System.Data.Common; 
using System.Data.Metadata.Edm;
using System.Data.Objects;
using System.Collections.Generic;
using System.Data.Common.Utils; 
using System.Collections;
using System.Data.Entity; 
namespace System.Data.Mapping.Update.Internal 
{
    ///  
    /// Converts records to new instance expressions. Assumes that all inputs come from a single data reader (because
    /// it caches record layout). If multiple readers are used, multiple converters must be constructed in case
    /// the different readers return different layouts for types.
    ///  
    /// 
    /// Conventions for modifiedProperties enumeration: null means all properties are modified, empty means none, 
    /// non-empty means some. 
    /// 
    internal class RecordConverter 
    {
        #region Constructors
        /// 
        /// Initializes a new converter given a command tree context. Initializes a new record layout cache. 
        /// 
        /// Sets  
        internal RecordConverter(UpdateTranslator updateTranslator) 
        {
            m_updateTranslator = updateTranslator; 
        }
        #endregion

        #region Fields 
        /// 
        /// Context used to produce expressions. 
        ///  
        private UpdateTranslator m_updateTranslator;
        #endregion 

        #region Methods
        /// 
        /// Converts original values in a state entry to a DbNewInstanceExpression. The record must be either an entity or 
        /// a relationship set instance.
        ///  
        ///  
        /// This method is not thread safe.
        ///  
        /// Gets state entry this record is associated with.
        /// Indicates how to determine whether a property is modified.
        /// New instance expression.
        internal PropagatorResult ConvertOriginalValuesToPropagatorResult(IEntityStateEntry stateEntry, ModifiedPropertiesBehavior modifiedPropertiesBehavior) 
        {
            return ConvertStateEntryToPropagatorResult(stateEntry, useCurrentValues: false, modifiedPropertiesBehavior: modifiedPropertiesBehavior); 
        } 

        ///  
        /// Converts current values in a state entry to a DbNewInstanceExpression. The record must be either an entity or
        /// a relationship set instance.
        /// 
        ///  
        /// This method is not thread safe.
        ///  
        /// Gets state entry this record is associated with. 
        /// Indicates how to determine whether a property is modified.
        /// New instance expression. 
        internal PropagatorResult ConvertCurrentValuesToPropagatorResult(IEntityStateEntry stateEntry, ModifiedPropertiesBehavior modifiedPropertiesBehavior)
        {
            return ConvertStateEntryToPropagatorResult(stateEntry, useCurrentValues: true, modifiedPropertiesBehavior: modifiedPropertiesBehavior);
        } 

        private PropagatorResult ConvertStateEntryToPropagatorResult(IEntityStateEntry stateEntry, bool useCurrentValues, ModifiedPropertiesBehavior modifiedPropertiesBehavior) 
        { 
            try
            { 
                EntityUtil.CheckArgumentNull(stateEntry, "stateEntry");
                IExtendedDataRecord record = useCurrentValues
                    ? EntityUtil.CheckArgumentNull(stateEntry.CurrentValues as IExtendedDataRecord, "stateEntry.CurrentValues")
                    : EntityUtil.CheckArgumentNull(stateEntry.OriginalValues as IExtendedDataRecord, "stateEntry.OriginalValues"); 

                bool isModified = false; // the root of the state entry is unchanged because the type is static 
                return ExtractorMetadata.ExtractResultFromRecord(stateEntry, isModified, record, useCurrentValues, m_updateTranslator, modifiedPropertiesBehavior); 
            }
            catch (Exception e) 
            {
                if (UpdateTranslator.RequiresContext(e))
                {
                    throw EntityUtil.Update(Strings.Update_ErrorLoadingRecord, e, stateEntry); 
                }
                throw; 
            } 
        }
        #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; 
using System.Data.Metadata.Edm;
using System.Data.Objects;
using System.Collections.Generic;
using System.Data.Common.Utils; 
using System.Collections;
using System.Data.Entity; 
namespace System.Data.Mapping.Update.Internal 
{
    ///  
    /// Converts records to new instance expressions. Assumes that all inputs come from a single data reader (because
    /// it caches record layout). If multiple readers are used, multiple converters must be constructed in case
    /// the different readers return different layouts for types.
    ///  
    /// 
    /// Conventions for modifiedProperties enumeration: null means all properties are modified, empty means none, 
    /// non-empty means some. 
    /// 
    internal class RecordConverter 
    {
        #region Constructors
        /// 
        /// Initializes a new converter given a command tree context. Initializes a new record layout cache. 
        /// 
        /// Sets  
        internal RecordConverter(UpdateTranslator updateTranslator) 
        {
            m_updateTranslator = updateTranslator; 
        }
        #endregion

        #region Fields 
        /// 
        /// Context used to produce expressions. 
        ///  
        private UpdateTranslator m_updateTranslator;
        #endregion 

        #region Methods
        /// 
        /// Converts original values in a state entry to a DbNewInstanceExpression. The record must be either an entity or 
        /// a relationship set instance.
        ///  
        ///  
        /// This method is not thread safe.
        ///  
        /// Gets state entry this record is associated with.
        /// Indicates how to determine whether a property is modified.
        /// New instance expression.
        internal PropagatorResult ConvertOriginalValuesToPropagatorResult(IEntityStateEntry stateEntry, ModifiedPropertiesBehavior modifiedPropertiesBehavior) 
        {
            return ConvertStateEntryToPropagatorResult(stateEntry, useCurrentValues: false, modifiedPropertiesBehavior: modifiedPropertiesBehavior); 
        } 

        ///  
        /// Converts current values in a state entry to a DbNewInstanceExpression. The record must be either an entity or
        /// a relationship set instance.
        /// 
        ///  
        /// This method is not thread safe.
        ///  
        /// Gets state entry this record is associated with. 
        /// Indicates how to determine whether a property is modified.
        /// New instance expression. 
        internal PropagatorResult ConvertCurrentValuesToPropagatorResult(IEntityStateEntry stateEntry, ModifiedPropertiesBehavior modifiedPropertiesBehavior)
        {
            return ConvertStateEntryToPropagatorResult(stateEntry, useCurrentValues: true, modifiedPropertiesBehavior: modifiedPropertiesBehavior);
        } 

        private PropagatorResult ConvertStateEntryToPropagatorResult(IEntityStateEntry stateEntry, bool useCurrentValues, ModifiedPropertiesBehavior modifiedPropertiesBehavior) 
        { 
            try
            { 
                EntityUtil.CheckArgumentNull(stateEntry, "stateEntry");
                IExtendedDataRecord record = useCurrentValues
                    ? EntityUtil.CheckArgumentNull(stateEntry.CurrentValues as IExtendedDataRecord, "stateEntry.CurrentValues")
                    : EntityUtil.CheckArgumentNull(stateEntry.OriginalValues as IExtendedDataRecord, "stateEntry.OriginalValues"); 

                bool isModified = false; // the root of the state entry is unchanged because the type is static 
                return ExtractorMetadata.ExtractResultFromRecord(stateEntry, isModified, record, useCurrentValues, m_updateTranslator, modifiedPropertiesBehavior); 
            }
            catch (Exception e) 
            {
                if (UpdateTranslator.RequiresContext(e))
                {
                    throw EntityUtil.Update(Strings.Update_ErrorLoadingRecord, e, stateEntry); 
                }
                throw; 
            } 
        }
        #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