SQLSugar中Includes和Mapper的区别

发布时间 2023-10-08 16:33:30作者: 七星飘虫

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

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

示例:

// 假设有一个过滤器定义在Customer实体上
db.Filter<Customer>().Where(c => c.IsActive == true);

var order = db.Queryable<Order>()
    .Where(o => o.OrderId == orderId)
    .Include(o => o.Customer)  // 不受过滤器的影响,会加载所有的Customer
    .Single();

  

  1. Mapper方法:与Include方法不同,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方法,并在其中定义条件。