File: System\Data\Metadata\Edm\RelationshipEndMember.cs
Project: ndp\fx\src\DataEntity\System.Data.Entity.csproj (System.Data.Entity)
//---------------------------------------------------------------------
// <copyright file="RelationshipEndMember.cs" company="Microsoft">
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//
// @owner       Microsoft
// @backupOwner Microsoft
//---------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.Common;
 
namespace System.Data.Metadata.Edm
{
    /// <summary>
    /// Initializes a new instance of the RelationshipEndMember class
    /// </summary>
    public abstract class RelationshipEndMember : EdmMember
    {
        #region Constructors
        /// <summary>
        /// Initializes a new instance of RelationshipEndMember
        /// </summary>
        /// <param name="name">name of the relationship end member</param>
        /// <param name="endRefType">Ref type that this end refers to </param>
        /// <param name="multiplicity">The multiplicity of this relationship end</param>
        /// <exception cref="System.ArgumentNullException">Thrown if name or endRefType arguments is null</exception>
        /// <exception cref="System.ArgumentException">Thrown if name argument is empty string</exception>
        internal RelationshipEndMember(string name, 
                                       RefType endRefType,
                                       RelationshipMultiplicity multiplicity)
        : base(name, 
               TypeUsage.Create(endRefType, new FacetValues{ Nullable = false }))
        {
            _relationshipMultiplicity = multiplicity;
            _deleteBehavior = OperationAction.None;
        }
        #endregion
 
        #region Fields
        private OperationAction _deleteBehavior;
        private RelationshipMultiplicity _relationshipMultiplicity;
        #endregion
 
        #region Properties
        /// <summary>
        /// Returns the operational behaviour for this end
        /// </summary>
        [MetadataProperty(BuiltInTypeKind.OperationAction, true)]
        public OperationAction DeleteBehavior
        {
            get
            {
                return _deleteBehavior;
            }
            internal set
            {
                Util.ThrowIfReadOnly(this);                
                _deleteBehavior = value;
            }
 
        }
 
        /// <summary>
        /// Returns the multiplicity for this relationship end
        /// </summary>
        [MetadataProperty(BuiltInTypeKind.RelationshipMultiplicity, false)]
        public RelationshipMultiplicity RelationshipMultiplicity
        {
            get
            {
                return _relationshipMultiplicity;
            }
        }
        #endregion
 
        public EntityType GetEntityType()
        {
            if (TypeUsage == null)
                return null;
            return (EntityType)((RefType)TypeUsage.EdmType).ElementType;
        }
    }
}