File: System\Data\EntityModel\SchemaObjectModel\KeyProperty.cs
Project: ndp\fx\src\DataEntity\System.Data.Entity.csproj (System.Data.Entity)
//---------------------------------------------------------------------
// <copyright file="keyproperty.cs" company="Microsoft">
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//
// @owner       Microsoft
// @backupOwner Microsoft
//---------------------------------------------------------------------
 
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Data.Metadata.Edm;
 
 
namespace System.Data.EntityModel.SchemaObjectModel
{
    /// <summary>
    /// Represents PropertyRef Element for Entity keys and referential constraints
    /// </summary>
    internal sealed class PropertyRefElement : SchemaElement
    {
        #region Instance Fields
        private StructuredProperty _property = null;
        #endregion
 
        #region Public Methods
        /// <summary>
        /// construct a KeyProperty object
        /// </summary>
        /// <param name="parentElement"></param>
        public PropertyRefElement(SchemaElement parentElement)
            : base(parentElement)
        {
        }
        #endregion
 
        #region Public Properties
        /// <summary>
        /// property chain from KeyedType to Leaf property
        /// </summary>
        public StructuredProperty Property
        {
            get
            {
                return _property;
            }
        }
        #endregion
 
        #region Private Methods
 
        internal override void ResolveTopLevelNames()
        {
            Debug.Assert(false, "This method should never be used. Use other overload instead");
        }
 
        /// <summary>
        /// Since this method can be used in different context, this method does not add any errors
        /// Please make sure that the caller of this methods handles the error case and add errors 
        /// appropriately
        /// </summary>
        /// <param name="entityType"></param>
        /// <returns></returns>
        internal bool ResolveNames(SchemaEntityType entityType)
        {
            if (string.IsNullOrEmpty(this.Name))
            {
                // Don't flag this error. This must already must have flaged as error, while handling name attribute
                return true;
            }
 
            // Make sure there is a property by this name
            _property = entityType.FindProperty(this.Name);
 
            return (_property != null);
        }
 
        #endregion
    }
}