天天看點

三、定義主從實體基類三、定義主從實體基類

定義主從實體基類的原因是我希望在類的定義時,可以很明确的了解類之間的主從關系。

定義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()  

    {  

    }  

    /// 按table的第一行資料進行屬性的初始化  

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

    public PrimaryDataEntityBase(System.Data.DataTable table)  

        : this(table, 0)  

    /// 按table的指定行資料進行屬性的初始化  

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

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

        : base(table, indexRow)  

    /// 裝載目前從表的詳細項  

    protected abstract List<F> LoadDetailedItems();  

    /// 存放外鍵表的資料項目的集合  

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

    /// 擷取外鍵表資料的集合  

    public List<F> DetailedItems  

        get  

        {  

            return LoadDetailedItems();  

        }  

    /// 傳回外鍵表的資料項目數量  

    public int DetailedItemCount  

            return items.Count;  

    /// 将一個外鍵實體加入集合  

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

    /// <returns></returns>  

    public abstract void Add(F item);  

    /// 從集合中移除一個外鍵實體  

    public abstract void Remove(F item);  

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

    public abstract void RemoveAt(int index);  

    /// 傳回或設定比對索引的訂單詳細項  

    public abstract F this[int index]  

        set;  

        get;  

定義ForeignDataEntityBase

/// 描述主從表的從表的資料實體  

/// <typeparam name="ID">從表實體的主鍵ID</typeparam>  

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

    /// ForeignDataEntityBase的預設構造函數  

    public ForeignDataEntityBase()  

    public ForeignDataEntityBase(System.Data.DataTable table)  

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

    /// 對應主鍵實體  

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

    public P RelationOrder  

/// 客戶委托單  

[System.ComponentModel.DataObject(true)]  

public class BusinessOrder : LogisticsOrderBase<BusinessOrder, BusinessOrderItem>  

}  

/// 委托單詳細  

public class BusinessOrderItem : DetailedItemBase<BusinessOrder, BusinessOrderItem>  

現在我們的類在定義的時候,就可以非常明确的描述了主從實體的關系,并擁有了資料自動屬性裝載的能力。

本文轉自shyleoking 51CTO部落格,原文連結:http://blog.51cto.com/shyleoking/805772

繼續閱讀