File: System\Data\Common\CommandTrees\DbSetClause.cs
Project: ndp\fx\src\DataEntity\System.Data.Entity.csproj (System.Data.Entity)
//---------------------------------------------------------------------
// <copyright file="DbSetClause.cs" company="Microsoft">
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//
// @owner  Microsoft
// @backupOwner Microsoft
//---------------------------------------------------------------------
 
using System;
using System.Collections.Generic;
 
using System.Data.Metadata.Edm;
using System.Data.Common.CommandTrees.Internal;
using System.Data.Common.Utils;
using System.Diagnostics;
 
namespace System.Data.Common.CommandTrees
{
    /// <summary>
    /// Specifies a clause in a modification operation setting the value of a property.
    /// </summary>
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Db")]
    public sealed class DbSetClause : DbModificationClause
    {
        private DbExpression _prop;
        private DbExpression _val;
 
        internal DbSetClause(DbExpression targetProperty, DbExpression sourceValue)
            : base()
        {
            EntityUtil.CheckArgumentNull(targetProperty, "targetProperty");
            EntityUtil.CheckArgumentNull(sourceValue, "sourceValue");
            _prop = targetProperty;
            _val = sourceValue;
        }
 
        /// <summary>
        /// Gets an <see cref="DbExpression"/> that specifies the property that should be updated.
        /// </summary>
        /// <remarks>
        /// Constrained to be a <see cref="DbPropertyExpression"/>.
        /// </remarks>
        public DbExpression Property
        {
            get
            {
                return _prop;
            }
        }
        
        /// <summary>
        /// Gets an <see cref="DbExpression"/> that specifies the new value with which to update the property.
        /// </summary>
        /// <remarks>
        /// Constrained to be a <see cref="DbConstantExpression"/> or <see cref="DbNullExpression"/>
        /// </remarks>
        public DbExpression Value
        { 
            get
            {
                return _val;
            }
        }
                
        internal override void DumpStructure(ExpressionDumper dumper)
        {
            dumper.Begin("DbSetClause");
            if (null != this.Property)
            {
                dumper.Dump(this.Property, "Property");
            }
            if (null != this.Value)
            {
                dumper.Dump(this.Value, "Value");
            }
            dumper.End("DbSetClause");
        }
 
        internal override TreeNode Print(DbExpressionVisitor<TreeNode> visitor)
        {
            TreeNode node = new TreeNode("DbSetClause");
            if (null != this.Property)
            {
                node.Children.Add(new TreeNode("Property", this.Property.Accept(visitor)));
            }
            if (null != this.Value)
            {
                node.Children.Add(new TreeNode("Value", this.Value.Accept(visitor)));
            }
            return node;
        }
    }
}