【问题标题】:Custom relationship table in many to many relationship多对多关系中的自定义关系表
【发布时间】:2015-05-06 05:25:30
【问题描述】:

所以,我正在编写一个电子商务应用程序,并尝试在 ProductSize 类之间创建多对多关系。实体看起来像这样:

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 类一个虚拟的ICollectionSize,那么获取完整信息只是一件简单的事情。因此,如果我选择了Product 实例,那么所有尺寸都将加载到它的virtual ICollection<Size> 中。

问题是 - 我可以使用上面给出的实体结构实现相同程度的简单性吗?而不是写一个 2 连接查询,我明确提到我想要的每一列,然后将它打包成一些 ViewModel 我想使用更简单的语法来获取 Product 实例及其相关数据(数据也是如此)它位于中间表中)。

【问题讨论】:

  • 你不能在ProductSize 类上都添加virtual ICollection<ProductSize> 吗?

标签: c# entity-framework


【解决方案1】:

Inverse Navigation PropertyProductSize 添加到ProductSize,如下所示:

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;

【讨论】:

  • 谢谢,我明天试试,然后接受你的回答。
猜你喜欢
  • 2019-02-09
  • 2020-08-27
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
相关资源
最近更新 更多