减少EF中的查询数量

时间:2009-06-30 14:22:18

标签: entity-framework

我有以下型号:

实体:

  • 产品(包含基本数据) 产品:价格等)
  • 属性(包含所有可能的可选属性的数据)
  • ProductAttribute(包含产品可选属性的数据,例如。 颜色,型号,尺寸)。 ProductAttribute 本质上是一对多 与有效载荷的关系(ProductId, AttributeID,Value)

这段代码:

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()方法时触发查询,只有这样我才能显示属性的名称。 我想获取Attribute.Name以及获取所有属性值的查询,即加入ProductAttribute和Attribute。 有没有办法在我的方法中实现这个目标?

1 个答案:

答案 0 :(得分:1)

看起来你有一个围绕EntityObject的包装器来自己加载每个实体。

如果你想保持这种结构。我认为您需要做的是重载ProductAttributes.Load()方法以接受枚举或其他内容。然后在该Load方法中,您可以执行Linq-to-Entity或Entity-SQL查询连接,并为您包含属性。

var query = from c in context.Product.Include("Attributes");