SQLSugar中Includes和Mapper的区别
在SQLSugar中,Includes和Mapper确实在处理过滤器方面有一些不同的行为。
Includes方法:当你使用Includes方法来加载关联实体时,SQLSugar会忽略过滤器,不会将过滤器应用于加载的关联实体。这意味着无论你是否定义了过滤器,使用Includes方法加载的关联实体都会被加载,而不受过滤器的影响。
示例:
// 假设有一个过滤器定义在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();
Mapper方法:与Includes方法不同,Mapper方法会受到过滤器的影响。如果你在模型上定义了过滤器,然后使用Mapper方法来映射查询结果到实体模型,过滤器会应用于加载的数据。这意味着只有符合过滤器条件的数据才会被加载到实体模型中。
示例:
// 假设有一个过滤器定义在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则包含过滤器相关的查询条件。

浙公网安备 33010602011771号