public class MyDbContext: DbContext
{
}
public class Product
{
public long Id {get; set;}
public long CategoryId {get; set;}
[ForeignKey("CategoryId")]
public virtual Category Category {get; set;}
}
public class Category
{
public long Id {get; set;}
public string Name {get; set;}
}
List<Product> GetProducts()
{
var context = new MyDbContext();
var products = context.Set<Product>().ToList();
var categories = context.Set<Category>().ToList();
foreach(var product = in products)
{
product.Category = categories.First(c => c.Id == product.CategoryId);
}
return products;
}
在这里,我想检索所有具有最佳性能的相关类别的产品。我首先尝试使用延迟加载,但它会导致许多数据库查询。然后我使用预加载,但生成的查询脚本效率不高,尤其是对于复杂的查询。所以我使用了以下方式:
获取所有产品,
获取所有类别和
从获取的类别中手动设置产品的导航属性“类别”
我的问题是:
- 即使在我手动设置导航属性“类别”后,EF 仍然会延迟加载它吗?
-对于复杂查询的急切加载,有没有更好的解决方案?