zoukankan      html  css  js  c++  java
  • 三、定义主从实体基类

    三、定义主从实体基类

    定义主从实体基类的原因是我希望在类的定义时,可以很明确的了解类之间的主从关系。

    3.1定义主表基类

    定义PrimaryDataEntityBase

    /// <summary>

    /// 描述主从表的主表的数据实体

    /// </summary>

    /// <typeparam name="ID">主表实体的主键ID</typeparam>

    /// <typeparam name="P">主表</typeparam>

    /// <typeparam name="F">从表</typeparam>

    public abstract class PrimaryDataEntityBase<ID, P, F> : EntityBase<P, ID>

        where P : PrimaryDataEntityBase<ID, P, F>

        where F : ForeignDataEntityBase<ID, P, F>

    {

        /// <summary>

        /// PrimaryDataEntityBase的默认构造函数

        /// </summary>

        public PrimaryDataEntityBase()

        {

     

        }

     

        /// <summary>

        /// 按table的第一行数据进行属性的初始化

        /// </summary>

        /// <param name="table"></param>

        public PrimaryDataEntityBase(System.Data.DataTable table)

            : this(table, 0)

        {

     

        }

     

        /// <summary>

        /// 按table的指定行数据进行属性的初始化

        /// </summary>

        /// <param name="table"></param>

        /// <param name="indexRow"></param>

        public PrimaryDataEntityBase(System.Data.DataTable table, int indexRow)

            : base(table, indexRow)

        {

     

        }

     

        /// <summary>

        /// 装载当前从表的详细项

        /// </summary>

        protected abstract List<F> LoadDetailedItems();

     

        /// <summary>

        /// 存放外键表的数据项目的集合

        /// </summary>

        protected List<F> items = new List<F>();

     

        /// <summary>

        /// 获取外键表数据的集合

        /// </summary>

        public List<F> DetailedItems

        {

            get

            {

                return LoadDetailedItems();

            }

        }

     

     

        /// <summary>

        /// 返回外键表的数据项目数量

        /// </summary>

        public int DetailedItemCount

        {

            get

            {

                return items.Count;

            }

        }

     

        /// <summary>

        /// 将一个外键实体加入集合

        /// </summary>

        /// <param name="item"></param>

        /// <returns></returns>

        public abstract void Add(F item);

     

        /// <summary>

        /// 从集合中移除一个外键实体

        /// </summary>

        /// <param name="item"></param>

        public abstract void Remove(F item);

     

        /// <summary>

        /// 从集合中移除一个外键实体

        /// </summary>

        /// <param name="index"></param>

        public abstract void RemoveAt(int index);

     

        /// <summary>

        /// 返回或设置匹配索引的订单详细项

        /// </summary>

        /// <param name="index"></param>

        /// <returns></returns>

        public abstract F this[int index]

        {

            set;

            get;

        }

    }

    3.2定义从表基类

    定义ForeignDataEntityBase

    /// <summary>

    /// 描述主从表的从表的数据实体

    /// </summary>

    /// <typeparam name="ID">从表实体的主键ID</typeparam>

    /// <typeparam name="P">主表</typeparam>

    /// <typeparam name="F">从表</typeparam>

    public abstract class ForeignDataEntityBase<ID, P, F> : EntityBase<F, ID>

        where P : PrimaryDataEntityBase<ID, P, F>

        where F : ForeignDataEntityBase<ID, P, F>

    {

        /// <summary>

        /// ForeignDataEntityBase的默认构造函数

        /// </summary>

        public ForeignDataEntityBase()

        {

     

        }

     

        /// <summary>

        /// 按table的第一行数据进行属性的初始化

        /// </summary>

        /// <param name="table"></param>

        public ForeignDataEntityBase(System.Data.DataTable table)

            : this(table, 0)

        {

     

        }

     

        /// <summary>

        /// 按table的指定行数据进行属性的初始化

        /// </summary>

        /// <param name="table"></param>

        /// <param name="indexRow"></param>

        public ForeignDataEntityBase(System.Data.DataTable table, int indexRow)

            : base(table, indexRow)

        {

     

        }

     

     

     

        /// <summary>

        /// 对应主键实体

        /// </summary>

        [System.ComponentModel.DataObjectField(false, false, false)]

        public P RelationOrder

        {

            set;

            get;

        }

    }

    3.3使用主从表基类

    /// <summary>

    /// 客户委托单

    /// </summary>

    [System.ComponentModel.DataObject(true)]

    public class BusinessOrder : LogisticsOrderBase<BusinessOrder, BusinessOrderItem>

    {

    }

    /// <summary>

    /// 委托单详细

    /// </summary>

    [System.ComponentModel.DataObject(true)]

    public class BusinessOrderItem : DetailedItemBase<BusinessOrder, BusinessOrderItem>

    {

    }

    现在我们的类在定义的时候,就可以非常明确的描述了主从实体的关系,并拥有了数据自动属性装载的能力。

  • 相关阅读:
    zabbix添加自定义监控项
    文件的时间属性(摘自网友的博客)
    svn从Windows服务器上迁移到Linux上
    modelsim 保存波形文件
    Viso Professional 2013版本激活(office 系列产品 -- visio 2013 / project 2013 破解工具
    kindle paperwhite3 连不上WIFI解决方法
    TotoiseSVN的基本使用方法
    SVN 版本服务器搭配全过程详解(含服务端、客户端)
    modelsim读写TXT文件
    如何对多个文件进行MODELSIM仿真? (由于是一个很大的项目,不可能把所有MODULE都放在一个文件里。 如何在ModelSim中对多个.V文件进行仿真?)
  • 原文地址:https://www.cnblogs.com/shyleoking/p/1336743.html
Copyright © 2011-2022 走看看