如何通过EF阅读多对多表格?我不知道如何使用多对多表。让我们说Product_Category
得到ProductID
和CategoryID
。
我如何通过例如
using(Entities db = new Entities)
{
/* cant access these here.. */}
方法??然而,我可以访问Product_Category
,但无法访问其ProductID
或CategoryID
。
我想列出所有产品,例如其中Product_Category.CategoryID == Category.ID
。
之前我从未使用过多对多表,所以我很欣赏一些简单的例子,如何通过asp.net中的EF访问它们。
谢谢
答案 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();
}