在为查询准备模型时,应避免在ASP.NET Core中包含不必要的include语句。在查询中使用 include 表示提前加载导航属性,以防止在运行时出现 隐式加载 。这样做可能会影响性能并导致潜在的性能问题。
下面是一个简单的查询示例,可以针对模型中的多个导航属性执行查询,而无需使用include语句,同时仍然支持延迟加载:
// 非 include 方案
var customers = context.Customers.Where(c => c.City == "Paris");
foreach(var customer in customers)
{
var orders = customer.Orders; // 延迟加载 orders 导航属性
foreach(var order in orders)
{
// 在此处执行操作
}
}
// 使用 include 语句的方案
var customers = context.Customers.Include(c => c.Orders).Where(c => c.City == "Paris");
foreach(var customer in customers)
{
var orders = customer.Orders; // 不属于延迟加载,会以独立的一次查询提前将所有订单加载出来
foreach(var order in orders)
{
// 在此处执行操作
}
}