ABP Vnext 数据库表字段存在IsDeleted如何物理删除HardDeleteAsync

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABP Vnext 数据库表字段存在IsDeleted如何物理删除HardDeleteAsync相关的知识,希望对你有一定的参考价值。

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()


这个时候查询的数据,就是过滤掉软删除的所有数据了。

以上是关于ABP Vnext 数据库表字段存在IsDeleted如何物理删除HardDeleteAsync的主要内容,如果未能解决你的问题,请参考以下文章

Abp VNext实战入门:DbMigrator 自定义项目所需种子数据

Abp vnext EFCore 实现动态上下文DbSet踩坑记

ABP Vnext 批量导入用户,解决密码加密问题

abp.io(vNext)部署备忘

abp.io(vNext)部署备忘

abp vNext 使用Mysql 数据库