Entity Framework .NET加载模型时排除软删除记录的实现
自动排除软删除记录的实现方案
下面针对不同技术场景给出直接的实现方式:
Entity Framework Core 场景
- 利用全局查询筛选器,在模型构建阶段配置,让所有默认查询自动排除
Deleted On不为空的记录:protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<你的实体类名称>() .HasQueryFilter(entity => entity.DeletedOn == null); } - 配置后,无论刷新模型还是通过DbSet查询,都会自动过滤软删除数据;如果需要临时查看已删除记录,可在查询后追加
IgnoreQueryFilters()方法。
- 利用全局查询筛选器,在模型构建阶段配置,让所有默认查询自动排除
Django ORM 场景
- 自定义模型管理器,重写查询方法默认过滤软删除记录:
from django.db import models class ActiveRecordManager(models.Manager): def get_queryset(self): return super().get_queryset().filter(deleted_on__isnull=True) class 你的模型类(models.Model): # 其他字段定义 deleted_on = models.DateTimeField(null=True, blank=True) objects = ActiveRecordManager() # 用于UI查询的默认管理器 all_records = models.Manager() # 保留原始管理器用于查看全量数据 - UI调用
你的模型类.objects.all()时,只会返回未删除的记录;如需查看所有数据,使用all_records管理器即可。
- 自定义模型管理器,重写查询方法默认过滤软删除记录:
原生SQL/数据库视图场景
- 如果未使用ORM,可创建数据库视图封装过滤逻辑,UI直接查询视图:
CREATE VIEW 视图名称 AS SELECT * FROM 你的数据表名称 WHERE [Deleted On] IS NULL; - 后续UI所有数据请求直接访问该视图,无需每次手动添加过滤条件。
- 如果未使用ORM,可创建数据库视图封装过滤逻辑,UI直接查询视图:
内容的提问来源于stack exchange,提问作者LordRofticus
相关产品推荐
相关产品推荐

