直接挑戰微軟Entity Framework 是需要勇氣!
先以資料新修刪操作為例,比較Entity Framework與Kuick的差異,雖然這不是ORM的全部,但它可是最常使用的功能之一,可以直覺且快速地撰寫程式碼,是每一個軟體架構永遠追求的目標。
Kucik與Entity Framework (EF)的設計原理不同,EF對於資料的CRUD操作,主要是透過DbContext間接達成。在Kuick的架構裡,是透過繼承而賦予每一個Entity具備直接與資料庫溝通的能力,這一點實作理念上的差異,也造就了Kuick程式碼簡單直覺的結果!
Kuick在ORM上的功能與EF不同的特性如下:
連結資料庫是部署議題,不需在程式設計期就指定連結的資料庫是MSSql, Oracle或是MySQL,而且每一個Entity皆可單獨設定連結不同的資料庫。
Entity與生具備直接跟資料庫溝通的能力,不需透過其他類別即可達成CRUD。
Entity具備 7 個公開事件,協助將資料庫Trigger功能轉成程式邏輯
public event EntityEventHandler BeforeAdd; // 新增 前
public event EntityEventHandler BeforeModify; // 修改 前
public event EntityEventHandler BeforeRemove; // 刪除 前
public event InstanceEventHandler AfterSelect; // 選取 後
public event EntityEventHandler AfterAdd; // 新增 後
public event EntityEventHandler AfterModify; // 修改 後
public event EntityEventHandler AfterRemove; // 刪除 後
Entity具備 4 個私有事件,協助進行資料異動稽核
private void DifferenceBefore(IEntity sender, EntityEventArgs e);
private void DifferenceAfterAdd(IEntity sender, EntityEventArgs e);
private void DifferenceAfterModify(IEntity sender, EntityEventArgs e);
private void DifferenceAfterRemove(IEntity sender, EntityEventArgs e);
Entity能自我描述資料欄位規格。
public Table Table;
public List Columns;
Entity能自我理解那些欄位資料已經修改。
public bool HasDirtyColumn;
public List GetDirtyColumns();
.Net 實值型別 (Value Types) 對應資料庫欄位值的null操作。
public bool IsNullCheck(string columnNameOrPropertyName);
public void IsNull(string columnNameOrPropertyName);
public void NotNull(string columnNameOrPropertyName);
private void SetNull(Column column);
所有特性的細節,留待後續說明。