ABP Vnext在寫表實體會繼承?
xxxEntity : FullAuditedAggregateRoot<Guid>
此時這個聚合根會包含一個 IsDeleted字段屬性,一旦繼承了這個軟刪除字段,你在倉儲對象調用?
await _xxxxRepository.DeleteAsync(x => x.Id > 0)
時的時候,發現數據庫的數據都是軟刪除,IsDeleted的數據都是true
如果你不繼承聚合根IsDeleted字段屬性,你調用DeleteAsync是可以進行物理刪除的。
有一些場景,必須是物理刪除+邏輯刪除同時存在的情況下,就直接崩潰了。
別擔心,abp vnext替我們想到了這個場景。如果你表結構有IsDeleted字段屬性,你想邏輯刪除就調用DeleteAsync,如果你想進行物理刪除,就調用HardDeleteAsync這個刪除功能,他存在 RepositoryExtensions擴展屬性里,使用的使用,要添加擴展屬性的引用?
using Volo.Abp.Domain.Repositories;
才可以進行物理刪除?
await _xxxxRepository.HardDeleteAsync(x => x.Id > 0);
如果不是硬刪,只是IsDelete=true的時候,在某些時候查詢又尷尬了。
此時構造函數注入下
public IDataFilter dataFilter { get; set; }
然后邏輯部分寫
using (dataFilter.Disable<ISoftDelete>()) //取消軟刪除的過濾
{//這里寫查詢代碼var?xxxList?=?await?_xxxxxRepository.GetListAsync()
}
這個時候查詢的數據,就是過濾掉軟刪除的所有數據了。