一、背景描述:
我在使用一个基于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>() 关闭了多租户过滤器的影响,给了我自定义条件下的数据。如下图所示: