首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

使用 ActiveEntity 簡化繼承體系映射類的寫入操作:NBear ORM 進階應用

     編輯:關於ASP.NET

上文《ORM 中的繼承關係映射全解》示範各種繼承映射,但「一實體一具體表」與「一實體一擴展表」方案下,子類儲存需手動 Save 實體本身及所有父類對應表,使用者難以掌握完整表結構。NBear v2.1.6 引入 ActiveEntity 類解決此問題。

ActiveEntity 核心功能

  • 封裝子類 Insert/Update/Delete 操作,自動處理父類表寫入。
  • 自動追蹤已修改屬性,僅更新真正變更的欄位。

主要成員

// 泛型參數:必須實作 IEntity
public class ActiveEntity<IEntityType> where IEntityType : IEntity

// 建構函式
public ActiveEntity(Gateway gateway, IEntityType obj)           // 基於既有實體
public ActiveEntity(Gateway gateway, params object[] pkValues)  // 依主鍵載入,或建立新實體

// 屬性
public ActiveEntityStatus Status { get; }  // New / Loaded
public IEntityType Entity { get; }         // 直接讀寫實體屬性

// 方法
public void Save() / Save(DbTransaction tran)
public void Delete() / Delete(DbTransaction tran)

使用範例:簡單實體

[Table("Categories")]
public interface Category : IEntity {
  [PrimaryKey] int CategoryID { get; }
  string CategoryName { get; set; }
  string Description { get; set; }
  byte[] Picture { get; set; }
}

// 載入現有
ActiveEntity<Category> obj = new ActiveEntity<Category>(gateway, 1);
obj.Entity.CategoryName = "NewName";
obj.Save(); // 僅更新 CategoryName 欄位

// 新增
ActiveEntity<Category> obj2 = new ActiveEntity<Category>(gateway);
obj2.Entity.CategoryName = "NewCategory";
obj2.Save(); // INSERT
obj2.Delete(); // DELETE

v2.1.6 其他重要更新

  1. Gateway.ExecuteProcedureXXX 新增支援預存程序輸出參數。
  2. 修復 Gateway.Save 可能導致交易死鎖的 Bug。

更多細節請參閱 NBear 中文使用手冊。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved