如何通过Entity Framework访问多对多表? asp.net

时间:2016-03-08 03:57:17

标签: c# sql asp.net entity-framework many-to-many

如何通过EF阅读多对多表格?我不知道如何使用多对多表。让我们说Product_Category得到ProductIDCategoryID

我如何通过例如

using(Entities db = new Entities)
{
    /* cant access these here.. */}

方法??然而,我可以访问Product_Category,但无法访问其ProductIDCategoryID

我想列出所有产品,例如其中Product_Category.CategoryID == Category.ID

之前我从未使用过多对多表,所以我很欣赏一些简单的例子,如何通过asp.net中的EF访问它们。

谢谢

2 个答案:

答案 0 :(得分:5)

导航属性是您的朋友。除非您在联结表中有其他属性,否则您不需要它。这就是模型中没有Product_Category的原因。所以说你的模型是:

public class Product
{
    public Product()
    {
        this.Categories = new HashSet<Category>();
    }
    public int ProductId { get; set; }
    public string ProductName { get; set; }

    public virtual ICollection<Category> Categories { get; set; }
}

public class Category
{
    public Category()
    {
        this.Products = new HashSet<Product>();
    }

    public int CategoryId { get; set; }
    public string CategoryName { get; set; }

    public virtual ICollection<Product> Products { get; set; }
}

现在,如果您想要所有类别的产品,您可以执行以下操作:

var productsInCategory = db.Categorys
                      .Where(c => c.CategoryId == categoryId)
                      .SelectMany(c => c.Products);

如果您确实需要明确的联结表,请参阅:https://lostechies.com/jimmybogard/2014/03/12/avoid-many-to-many-mappings-in-orms/

答案 1 :(得分:0)

您必须使用桥接表Product_Category加入产品和类别表,以检索所需的产品信息。

using(eShopEntities db = new eShopEntities)
{
    var products = (from p in db.Product_Category 
                    join ProductTable pt on p.ID = pt.ProductID
                    join Category c on c.ID = P.CategoryID 
                    select new 
                           {
                                p.ID,
                                p.Name,
                                p.Description,
                                p.Price
                           }).ToList();
}