﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sofire.Data
{
    /// <summary>
    /// 表示一张表的标识。
    /// </summary>
    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
    public class TableAttribute : Attribute
    {
        private string _Name;
        /// <summary>
        /// 获取或设置数据库的表名。
        /// </summary>
        public string Name { get { return this._Name; } set { this._Name = value; } }

        private string _Schema;
        /// <summary>
        /// 获取或设置表的所属的架构（用户）。
        /// </summary>
        public string Schema { get { return this._Schema; } set { this._Schema = value; } }

        /// <summary>
        /// 初始化 <see cref="Sofire.Data.TableAttribute"/> 类的新实例。
        /// </summary>
        public TableAttribute() { }

        /// <summary>
        /// 指定名称，初始化 <see cref="Sofire.Data.TableAttribute"/> 类的新实例。
        /// </summary>
        /// <param name="name">名称。</param>
        public TableAttribute(string name)
        {
            this._Name = name;
        }

        /// <summary>
        /// 初始化映射器。
        /// </summary>
        /// <param name="mapper">映射器。</param>
        public void Initialization(IEntityMapper mapper)
        {
            if(this._Name == null) return;
            mapper.Name = string.IsNullOrEmpty(this._Schema)
                            ? this._Name
                            : (this._Schema + "." + this._Name);
        }
    }

}
