2
でクエリの数を減らして
属性(すべてのデータが含まれています:
I以下のモデルがあります:はEF
エンティティ:
- 製品は、(価格など 製品の基本的なデータが含まれています)可能なオプション属性)
- ProductAttribute(製品のオプション属性のデータが含まれています。たとえば、 色、モデル、サイズ)。 ProductAttribute は、本質的にペイロードを持つ多くの 関係(のProductId、 AttributeID、バリュー)
とコードのこの作品に多くのです:
private static void ListAttributes(Product p)
{
p.ProductAttributes.Load();
foreach (var att in p.ProductAttributes)
{
att.Attribute.load();
Console.WriteLine("\tAttribute Name:{0} - Value {1}",
att.Attribute.Name,
att.AttributeValue);
}
}
コードのこの作品は、毎回のクエリを起動しますforeachループではatt.Attribute.Load()メソッドが呼び出されますので、属性の名前を表示することができます。 すべての属性値を取得するクエリ、つまりProductAttributeとAttributeを結合するクエリとともにAttribute.Nameをフェッチしたいとします。 私の方法でこれを達成する方法はありますか?
私はp.ProductAttributes.Load()に問題はありません。部。これにより、各製品のクエリが発生します(数十のオーダー)。この問題は、att.Attribute.load()にあります。これは100のオーダーのSQLクエリを起動するからです。 さらに、att.Attribute.IsLoadedプロパティを使用すると不要なクエリの数が減りますが、これはまだ最適ではありません。 – Gio2k
私には、att.Attribute.load()メソッドを使用する方法はありません。それは「子供」だからです。兄弟の属性についてはわかりません。 「親」ロードメソッド(p.ProductAttributes.Load())を使用して作業する場合、そのロードメソッドが製品と属性を単一のメソッド呼び出しで生成するようにすることができます。 –