我的应用程序具有以下实体(产品和模型之间具有多对多关系):
public class TopProduct {
public virtual int Id { get; set; }
public virtual Product Product { get; set; }
public virtual int Order { get; set; }
}
public class Product {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Model> Models { get; set; }
}
public class Model {
public virtual string ModelNumber { get; set; }
public virtual IList<Product> Products { get; set; }
}
注意:一个产品可能有 1000 多个模型。
我需要显示 TopProducts 列表和前 5 个模型(按字母顺序排列)。
例如说我有以下查询:
var topProducts = session.Query<TopProduct>()
.Cacheable()
.Fetch(tp => tp.Product).ThenFetchMany(p => p.Models)
.OrderBy(tp => tp.Order)
.ToList();
如果我现在说:
foreach (var topProduct in topProducts) {
var models = topProduct.Product.Models.Take(5).ToList();
...
}
这执行非常慢,因为它从每个模型的二级缓存中检索项目。由于一个产品可能有 1000 个模型,因此第二次执行时需要从缓存中检索 1000 个项目。
我一直在绞尽脑汁试图想出一种更好的方法来做到这一点,但到目前为止我还没有想法。不幸的是,现阶段无法修改我的模型和数据库。
我会很感激帮助。谢谢