【问题标题】:Entity Framework Issue with connecting more than one table连接多个表的实体框架问题
【发布时间】:2014-03-08 20:21:16
【问题描述】:

我有产品表

产品

->productID - 主要

->价格

->数量


productCategory - 表格

->prodcatID-primary

->productId - 外键

->categoryID - 外键


产品语言 - 表格

->productLanguages - 主要

->productID - 外键

->languageID - 外键

->标题

所以我应该使用实体框架,并且我应该以某种方式从给定类别和给定语言中获取所有产品及其标题、数量和价格。所以我应该以某种方式结合所有这三个表中的信息


所以我从thisuery开始

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

并从单个类别中获取所有产品 -> 但现在我无法访问 PRODUCTLANGUAGE TABLE 并且无法按语言过滤。

如果我开始

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

现在我无法访问 productCategories。

我已经思考了好几个小时,但我找不到将产品语言和产品类别联系起来的方法。

【问题讨论】:

    标签: entity-framework


    【解决方案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"); });
    

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

    如果您解决了问题,请告诉我。

    【讨论】:

      猜你喜欢
      • 2014-05-11
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多