首页 > 其他分享 >EFCore 使用FluntApi配置 全局查询筛选器

EFCore 使用FluntApi配置 全局查询筛选器

时间:2023-10-08 10:44:25浏览次数:32  
标签:OnModelCreating void 查询 modelBuilder EFCore FluntApi 筛选 public IsDel

我们在类中通常会有一个属性为 IsDel来表示软删除或也称逻辑删除,这个属性会导致我们在进行查询操作时,每一次都要 .where(s=>s.IsDel==false) 非常的麻烦。在使用efCore时可用通过配置查询筛选器来很好的解决这个问题。
public class SysUser
{
public long Id { get; set; }
public bool IsDel { get; set; } = false;
public DateTime CreateTime { get; set; }
}
我们SysUser类中的IsDel属性代表我们的软删除。

我这里自己的DbContext类名叫MyDbContext
public class MyDbContext:DbContext

在MyDbContext中重写OnModelCreating方法来对SysUser类进行配置查询过滤器
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity().HasQueryFilter(u => u.IsDel == false);
}
但是由于我们项目中会有很多的实体类所以都写在这里有些臃肿。
我们可以新建EntityBase文件夹或者项目(具体怎么样看个人习惯),我这里就新建了文件夹。
在文件夹中新建类,实现IEntityTypeConfiguration接口,来对实体类进行配置
public class SysUserEntityConfig : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
builder.HasQueryFilter(u => u.IsDel == false);
}
}
然后在OnModelCreating方法中,通过 modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly) 方法从当前类所在的程序集中自动应用所有实现了 IEntityTypeConfiguration 接口的实体配置类。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
}
如果不在同一个程序集,可以使用这种方法
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
var assembly = Assembly.Load("EntityConfigurations(这里要换成自己实际的程序集)");
modelBuilder.ApplyConfigurationsFromAssembly(assembly);
}

通过这种方式我们就可以在使用efCore时实现全局查询筛选了。

标签:OnModelCreating,void,查询,modelBuilder,EFCore,FluntApi,筛选,public,IsDel
From: https://www.cnblogs.com/cyfj/p/17748262.html

相关文章

  • 特征筛选-WOE和IV
    背景在评分卡建模流程中,WOE(WeightofEvidence)常用于特征变换,IV(InformationValue)则用来衡量特征的预测能力。文章取自:风控模型—WOE与IV指标的深入理解应用代码取自:特征值筛选依据:IV值和WOE的python计算WOE和IV的应用价值WOE(WeightofEvidence)叫做证据权重,大家可以思考下为......
  • AppleScript成功实现FaceTime语音,FaceTime视频,FaceTime数据筛选,检测手机号是否开通
    FaceTime是苹果公司iOS和macOS(以前称MacOSX或OSX)内置的一款视频通话软件,通过Wi-Fi或者蜂窝数据接入互联网,在两个装有FaceTime的设备之间实现视频通话。其要求通话双方均具有装有FaceTime的苹果设备,苹果ID以及可接入互联网的3G/4G/5G或者Wi-Fi网络。 一、Windows电脑上部署......
  • Applescript成功实现imessage数据筛选,imessage蓝号检测,无痕检测手机号是否注册imess
    一、imessages数据检测的两种方式:1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地址栏,iMessage客户端会自动逐个检验该号码是否为iMessage账号,检验速度视网速而定。红色表示不是iMessage账号,蓝色表示iMessage账号。2.编写苹果MacOs......
  • 成功实现FaceTime语音,FaceTime视频,FaceTime数据筛选,检测手机号是否开通FaceTime的
    FaceTime是苹果公司iOS和macOS(以前称MacOSX或OSX)内置的一款视频通话软件,通过Wi-Fi或者蜂窝数据接入互联网,在两个装有FaceTime的设备之间实现视频通话。其要求通话双方均具有装有FaceTime的苹果设备,苹果ID以及可接入互联网的3G/4G/5G或者Wi-Fi网络。 一、Windows电脑上部署......
  • jQuery与Ajax:“特别的”load()方法(筛选文档、传递方法、回调函数)
    “大名鼎鼎的”jQuery因为其极简的引用方式而在N年前备受追捧,而今“浪潮”过去,还剩下什么?我认识jQuery,只是在去年接触ajax时了解,从而感兴趣,进而深入探究(其实也没多深入,只是相关的看了一下)。不得不说,jQuery对ajax支持的四个type:post(一般用于发送)、get(一般常用于接收)、put(修改)、dele......
  • 筛选进程
    ps-elf是一个用于显示系统当前进程状态的常用命令,常见于Unix-like系统。它可以列出系统中所有进程的详细信息,并以树形结构展示进程间的关系。具体解释如下:ps:表示进程状态,用于报告当前系统进程的快照。-e:显示所有进程,而不仅仅是当前终端的进程。-l:显示详细的信息,包括......
  • • range向下扩充 • 筛选会阻断 • 隐藏无影响
    range(2,2).options(transpose=True)range(2,2).expand('down')不是range不能处理筛选而是range向下扩充筛选会阻断隐藏无影响https://blog.51cto.com/u_16055028/7491407......
  • 实验excel隐藏和筛选对python和xlwings的影响(完整版) 特别是如何对未筛选行赋值,需逐
    目的:实验excel隐藏和筛选对python和xlwings的影响(完整版)特别是如何对未筛选行赋值,需逐行赋值,range(行,列).value环境:JupyterNotebook其他环境需删除display函数代码:classClass_1:globalpd,np,os,xwimportpandasaspd,numpyasnpimportosimpo......
  • vba 筛选
    1.判断工作表是否处于自动筛选模式 取消自动筛选Sheets("sheet1").AutoFilterMode=False'注意这里对象是sheet,不需要sheet中的具体区域,比如[a1:c1]之类取消高级筛选:IfSheets("sheet1").FilterMode=TrueThenSheets("sheet1").ShowAllData 检测工作表是否处于自......
  • pandas 筛选某列包含空格或汉字的行
    importpandasaspd#创建示例DataFramedata={'某列':['Hello','123','包含空格','包含汉字','OnlyLetters']}df=pd.DataFrame(data)#使用正则表达式筛选包含空格或汉字的行pattern=r'\s|[\u4e00-\u9fa5]'#......