国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

詳解ABP框架中的數據過濾器與數據傳輸對象的使用

2024-07-10 12:47:09
字體:
來源:轉載
供稿:網友

數據過濾器(Data filters)
在數據庫開發中,我們一般會運用軟刪除(soft-delete)模式,即不直接從數據庫刪除數據,而是標記這筆數據為已刪除。因此,如果實體被軟刪除了,那么它就應該不會在應用程序中被檢索到。要達到這種效果,我們需要在每次檢索實體的查詢語句上添加SQL的Where條件IsDeleted = false。這是個乏味的工作,但它是個容易被忘掉的事情。因此,我們應該要有個自動的機制來處理這些問題。

ABP提供數據過濾器(Data filters),它使用自動化的,基于規則的過濾查詢。ABP已經有一些預定義的過濾器,當然也可以自行創建你專屬的過濾器。

注意:只針對EntityFramework:ABP數據過濾器僅實現在EntityFramework。還無法在其它ORM工具中使用。見其它ORM章節于本文末端。

預定義過濾器
1.軟刪除接口(ISoftDelete)

軟刪除過濾器(Soft-delete filter )會過濾從數據庫查詢出來的實體且是自動套用(從結果集中提取出來)。如果實體需要被軟刪除,它需要實現ISoftDelete接口,該接口僅定義了一個IsDeleted屬性。例:

 public class Person : Entity, ISoftDelete { public virtual string Name { get; set; } public virtual bool IsDeleted { get; set; } }

Person實體實際上并沒有從數據庫中被刪除,當刪除此實體時,IsDeleted屬性值會被設定為true。當你使用IRepository.Delete方法時,ABP會自動完成這些工作(你可以手動設定IsDeleted為true,但是Delete方法更加自然且是較建議的方式)。

當實現了ISoftDelete之后,當你已經從數據庫中取得了People列表,已被刪除的People實體并不會被檢索到。在這里有一個示例類,該類使用了person倉儲來取得所有的People實體: 

 public class MyService { private readonly IRepository<Person> _personRepository; public MyService(IRepository<Person> personRepository) {  _personRepository = personRepository; } public List<Person> GetPeople() {  return _personRepository.GetAllList(); } }

GetPeople方法僅取得Person實體,該實體其IsDeleted = false(非刪除狀態)。所有的倉儲方法以及導航屬性都能夠正常運作。我們可以添加一些其它的Where條件,Join...等等。它將會自動地添加IsDeleted=false條件到生成的SQL查詢語句中。

注意:何時啟用?ISoftDelete過濾器總是啟用,除非你直接禁用它。

提醒:如果你實現了IDeletionAudited接口(該接口繼承自ISoftDelete),刪除創建時間和被刪除的用戶Id,這些都會由ABP進行自動的處理。

2.多租接口(IMustHaveTenant)

如果你創建一個多租戶的應用程序(儲存所有租戶的數據于單一一個數據庫中),你肯定不會希望某個租戶看到其它租戶的資料。你可以實現IMustHaveTenant接口于此案例中,示例如下:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 岳阳市| 华池县| 福泉市| 襄樊市| 房山区| 龙山县| 涞水县| 吴堡县| 乌审旗| 田东县| 蒙自县| 安塞县| 彩票| 广昌县| 房产| 汾西县| 安宁市| 凤冈县| 武夷山市| 苍南县| 万全县| 新源县| 桃源县| 保德县| 吴川市| 临洮县| 丹东市| 淅川县| 新安县| 区。| 方山县| 绥中县| 永定县| 嘉善县| 如皋市| 汉沽区| 潮州市| 福州市| 汨罗市| 安塞县| 玉门市|