增加IsDeleted属性
软删除,设置IsDelete为true
Student s = ctx.Students.FirstOrDefault(s => s.Id == 10);
s.IsDeleted = true;
await ctx.SaveChangesAsync();
调用HasQueryFilter
public void Configure(EntityTypeBuilder<Student> builder)
{
builder.ToTable("student");
builder.Property(e => e.Name).HasColumnType("nvarchar(50)").IsRequired();
builder.HasQueryFilter(s => !s.IsDeleted);
}
普通查询
foreach (Student s in ctx.Students.Where(s => s.Id >= 9 && s.Id <= 12))
{
Console.WriteLine(s.Name);
}
可以看到查询语句多了IsDeleted <> 1,返回结果也没有包括id=10的记录
使用IgnoreQueryFilters(),忽略过滤器
foreach (Student s in ctx.Students.IgnoreQueryFilters().Where(s => s.Id >= 9 && s.Id <= 12))
{
Console.WriteLine(s.Name);
}
要注意,查询筛选可能带来性能问题。
由于增加了where子句,可能会使得已有的索引失效,最终导致全表扫描,影响性能。
---------------------------
知道的更多,不知道的也更多
---------------------------