美文网首页
ABP Vnext 数据库表字段存在IsDeleted如何物理删

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

作者: 畅聊了个科技 | 来源:发表于2022-08-19 23:36 被阅读0次

    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如何物理删

          本文链接:https://www.haomeiwen.com/subject/gcrpgrtx.html