File: System\Data\Objects\Internal\IChangeTrackingStrategy.cs
Project: ndp\fx\src\DataEntity\System.Data.Entity.csproj (System.Data.Entity)
//------------------------------------------------------------------------------
// <copyright file="IChangeTrackingStrategy.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
 
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.Objects.DataClasses;
 
namespace System.Data.Objects.Internal
{
    /// <summary>
    /// A strategy interface that defines methods used for different types of change tracking.
    /// Implementors of this interface are used by the EntityWrapper class.
    /// </summary>
    internal interface IChangeTrackingStrategy
    {
        /// <summary>
        /// Sets a change tracker onto an entity, or does nothing if the entity does not support change trackers.
        /// </summary>
        /// <param name="changeTracker">The change tracker to set</param>
        void SetChangeTracker(IEntityChangeTracker changeTracker);
 
        /// <summary>
        /// Takes a snapshot of the entity contained in the given state entry, or does nothing if
        /// snapshots are not required for the entity.
        /// </summary>
        /// <param name="entry">The state entry representing the entity to snapshot</param>
        void TakeSnapshot(EntityEntry entry);
 
        /// <summary>
        /// Sets the given value onto the entity with the registered change either handled by the
        /// entity itself or by using the given EntityEntry as the change tracker.
        /// </summary>
        /// <param name="entry">The state entry of the entity to for which a value should be set</param>
        /// <param name="member">State member information indicating the member to set</param>
        /// <param name="ordinal">The ordinal of the member to set</param>
        /// <param name="target">The object onto which the value should be set; may be the entity, or a contained complex value</param>
        /// <param name="value">The value to set</param>
        void SetCurrentValue(EntityEntry entry, StateManagerMemberMetadata member, int ordinal, object target, object value);
 
        /// <summary>
        /// Updates the current value records using Shaper.UpdateRecord but with additional change tracking logic
        /// added as required by POCO and proxy entities.
        /// </summary>
        /// <param name="value">The value</param>
        /// <param name="entry">The existing ObjectStateEntry</param>
        void UpdateCurrentValueRecord(object value, EntityEntry entry);
    }
}