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()
}
这个时候查询的数据,就是过滤掉软删除的所有数据了。