定義主從實體基類的原因是我希望在類的定義時,可以很明确的了解類之間的主從關系。
定義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