实体框架连接多个表的问题

时间:2014-02-11 07:00:28

标签: entity-framework

我有产品表

产品

- > productID - primary

- >价格

- >数量


productCategory -table

- > prodcatID- primary

- > productId - 外键

- > categoryID - 外键


productlanguages - 表

- > productLanguages - primary

- > productID - 外键

- > languageID - forein key

- >标题

所以我应该使用Entity框架,我应该以某种方式从GIVEN CATEGORY和GIVEN LANGUAGE 获得所有产品的标题,数量和价格。所以我应该以某种方式结合所有这三个表的信息


所以我开始使用thisuery

       var lst = db.ProuctCategories.Where(x=>x.CategoryID==catID).ToList();

获取单一类别的所有产品 - >但现在我无法使用PRODUCTANGUAGE TABLE,我无法按语言过滤。

如果我从

开始
       var lst = db.ProductLanguages.Where(x=>x.LanguageID==langID).ToList();

现在我无法访问productCategories。

我一直在想这几个小时,我找不到连接产品语言和产品类别的方法。

1 个答案:

答案 0 :(得分:1)

是否要求您在productCategory和productLanguages实体上拥有单独的ID?如果没有,我会这样实现:

public class Product
{
    [Key]
    public int Id { get; set; }
    public int Price{ get; set; }
    public int Qty{ get; set; }
    public virtual List<Category> Categories{ get; set; }
    public virtual List<Language> Languages{ get; set; }
}

public class Category 
{
    [Key]
    public int Id { get; set; }
    public string Description { get; set; }
    public virtual List<Product> Products{ get; set; }
}

public class Language
{
    [Key]
    public int Id { get; set; }
    public string Description { get; set; }
    public virtual List<Product> Products{ get; set; }
}

然后在重写OnModelCreating方法时定义多对多关系

modelBuilder.Entity<Product>().HasMany(p => p.Categories).WithMany(c => c.Products).Map(m => { m.MapLeftKey("ProductId"); m.MapRightKey("CategoryId"); m.ToTable("ProductCategories"); });
modelBuilder.Entity<Product>().HasMany(p => p.Languages).WithMany(l => l.Products).Map(m => { m.MapLeftKey("ProductId"); m.MapRightKey("LanguageId"); m.ToTable("ProductLanguages"); });

这样,虚拟属性应该允许您浏览实体及其关系。

如果您解决了问题,请与我们联系。