私のアプリケーションには次のエンティティがあります (製品とモデルの間に多対多の関係があります):
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; }
}
注: 製品には数千のモデルが含まれる場合があります。
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();
...
}
これは、各モデルの第 2 レベルのキャッシュから項目を取得するため、非常にゆっくりと実行されます。製品に対して数千のモデルが存在する可能性があるため、2 回目の実行時にキャッシュから数千のアイテムを取得する必要があります。
これを行うためのより良い方法を考えようと頭を悩ませてきましたが、今のところアイデアがありません。残念ながら、この段階ではモデルとデータベースを変更できません。
助けていただければ幸いです。ありがとう