SQLSugar中Includes和Mapper的区别

在SQLSugar中,IncludesMapper确实在处理过滤器方面有一些不同的行为。

  1. Includes方法:当你使用Includes方法来加载关联实体时,SQLSugar会忽略过滤器,不会将过滤器应用于加载的关联实体。这意味着无论你是否定义了过滤器,使用Includes方法加载的关联实体都会被加载,而不受过滤器的影响。

示例:

1
2
3
4
5
6
7
// 假设有一个过滤器定义在Customer实体上
db.Filter<Customer>().Where(c => c.IsActive == true);
 
var order = db.Queryable<Order>()
    .Where(o => o.OrderId == orderId)
    .Includes(o => o.Customer)  // 不受过滤器的影响,会加载所有的Customer
    .Single();

  

  1. Mapper方法:与Includes方法不同,Mapper方法会受到过滤器的影响。如果你在模型上定义了过滤器,然后使用Mapper方法来映射查询结果到实体模型,过滤器会应用于加载的数据。这意味着只有符合过滤器条件的数据才会被加载到实体模型中。

示例:

1
2
3
4
5
6
7
// 假设有一个过滤器定义在Customer实体上
db.Filter<Customer>().Where(c => c.IsActive == true);
 
var order = db.Queryable<Order>()
    .Where(o => o.OrderId == orderId)
    .Mapper(o => o.Customer, c => c.Id == orderId)  // 受过滤器的影响,只加载符合条件的Customer
    .Single();

  总之,要根据你的需求选择合适的方法。如果你希望加载所有关联实体而不受过滤器的影响,可以使用Include方法。如果你希望受到过滤器的影响,只加载符合条件的数据,可以使用Mapper方法,并在其中定义条件。

实测:

Includes和Mapper都会发送两条sql,先查出主表,然后再发送一条sql查询子表,在查询子表时Includes的sql不包含过滤器相关查询条件,而Mapper则包含过滤器相关的查询条件。

 

posted @   七星飘虫  阅读(1066)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示