所以,我正在编写一个电子商务应用程序,我正在尝试在Product
和Size
类之间创建多对多的关系。实体看起来像这样:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
public class Size
{
public int Id { get; set; }
public string Name { get; set; }
}
public class ProductSize
{
public int Id { get; set; }
public int ProductId { get; set; }
public int SizeId { get; set; }
public string Amount { get; set; }
public virtual Size Size { get; set; }
public virtual Product Product { get; set; }
}
通常我不会显式创建这个ProductSize
表,因为EF会为我创建它。但是,我需要Amount
列才能坐在那里。现在,为了获取有关大小和数量的产品的信息,我必须创建一个非常明确的查询(2个连接)。如果我没有手动创建关系类,只给Product
类ICollection
Size
,那么获取完整信息只是一件简单的事情。因此,如果我选择了Product
个实例,那么所有大小都会被加载到virtual ICollection<Size>
中。
问题是 - 我可以使用上面给出的实体结构实现相同的简单性吗?而不是编写一个2连接查询,我明确提到我想要的每一列,然后将其打包成一些ViewModel
我想使用更简单的语法来获取Product
实例及其相关数据(所以坐在中间表中的数据也是如此。
答案 0 :(得分:1)
ProductSize
从Product
和Size
添加Inverse Navigation Property,如下所示:
public class Product {
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public virtual ICollection<ProductSize> ProductSizes { get; set; }
}
public class Size {
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<ProductSize> ProductSizes { get; set; }
}
public class ProductSize {
public int Id { get; set; }
public int ProductId { get; set; }
public int SizeId { get; set; }
public string Amount { get; set; }
public virtual Size Size { get; set; }
public virtual Product Product { get; set; }
}
这样做,您应该能够在以下示例中执行此操作:
from p in Context.Products
where p.ProductSizes.Where(ps => ps.Amount > 0 && ps.Size.Name.Equals("Big")).Any()
select p;