标签:Students builder EF ctx dotnetcore Student 筛选 Id IsDeleted
增加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子句,可能会使得已有的索引失效,最终导致全表扫描,影响性能。
标签:Students,builder,EF,ctx,dotnetcore,Student,筛选,Id,IsDeleted 来源: https://www.cnblogs.com/mryux/p/15861806.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。