using Ant.ORM;
using System;
using System.Reflection;

namespace Ant.Descriptors
{
    public class NavigationMemberDescriptor : MemberDescriptor
    {
        MemberInfo _memberInfo;

        /// <summary>
        /// 假设实体 Order 内有个导航属性 User, Order.UserId=User.Id,则 ThisKey 为 Order.UserId,AssociatingKey 为 User.Id
        /// </summary>
        /// <param name="memberInfo"></param>
        /// <param name="memberType"></param>
        /// <param name="declaringEntityDescriptor"></param>
        /// <param name="thisKey">定义导航属性实体相关的属性或字段名称</param>
        /// <param name="associatingKey">关联导航属性实体类型的属性或字段名称</param>
        public NavigationMemberDescriptor(MemberInfo memberInfo, Type memberType, FiledMetaData declaringEntityDescriptor, string thisKey, string associatingKey)
            : base(declaringEntityDescriptor)
        {
            this._memberInfo = memberInfo;
            this.ThisKey = thisKey;
            this.AssociatingKey = associatingKey;
        }
        /// <summary>
        ///  获取有关成员特性的信息并提供对成员元数据的访问
        /// </summary>
        public override MemberInfo MemberInfo
        {
            get { return this._memberInfo; }
        }
        /// <summary>
        /// 表示类型声明:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以及开放或封闭构造的泛型类型
        /// </summary>
        public override Type MemberInfoType
        {
            get { throw new NotImplementedException(); }
        }
        /// <summary>
        /// 标记每个已定义为 MemberInfo 的派生类的成员类型
        /// </summary>
        public override MemberTypes MemberType
        {
            get { throw new NotImplementedException(); }
        }

        /// <summary>
        /// 假设实体 Order 内有个导航属性 User, Order.UserId=User.Id,则 ThisKey 为 Order.UserId,AssociatingKey 为 User.Id
        /// </summary>
        public string ThisKey { get; private set; }
        public string AssociatingKey { get; private set; }
    }
}