abpvnext --关于数据过滤的使用和禁用

在使用基于ABP的开发框架时,遇到数据查询返回null的问题,原因是数据字典服务的查询被多租户过滤器影响,自动添加了TenantId条件。通过将EF日志级别提升至Information,发现查询SQL存在冲突条件。经分析,问题出在实体继承了IMultiTenant接口,启用了多租户过滤。通过在代码中使用_dataFilter.Disable<IMultiTenant>()可以临时禁用该过滤器,从而得到期望的查询结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、背景描述:

我在使用一个基于abp的快速开发框架的数据字典服务查询数据时,自己写了根据code和tenantid条件来查询数据行,但是无论我用哪种方式加入这两个条件,数据返回的结果总是为null。 然后我修改json配置文件,将EF的日志级别修改为Information,输出sql脚本发现每次查询他会自动加上两个我没有加的条件,尤其是(`d`.`TenantId` IS NULL))),会跟我后面自定义的条件  AND (`d`.`TenantId` = @__tenantid_1) 互斥,造成本来满足条件的数据查不到了,如下图所示红框圈住部分的sql日志。

二、问题原因分析:

经过群内大佬指点,他们说是这个字典实体使用了abp的数据过滤机制引起的。我一查实体果然有继承一个IMultiTenant。经过查abpvnext官网文档,上面解释说这是多租户过滤器,原文链接指向Data Filtering | Documentation Center | ABP.IO

 

三、问题解决:

如果需要禁用此过滤器取得数据,需要在service上修改代码如下:

 

using (_dataFilter.Disable<IMultiTenant>()) 这行代码代表着我们在这个语句块内执行的数据查询会关闭租户过滤器,取消自动添加的那个租户sql条件。

再次调试代码发现,虽然此时生成的脚本还是带有(`d`.`TenantId` IS NULL))), 但是我查询返回的结果是有实体的,说明ABP根据我设定的手工开关_dataFilter.Disable<IMultiTenant>() 关闭了多租户过滤器的影响,给了我自定义条件下的数据。如下图所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值