我有产品表
产品表
- > 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。
我一直在想这几个小时,我找不到连接产品语言和产品类别的方法。
答案 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"); });
这样,虚拟属性应该允许您浏览实体及其关系。
如果您解决了问题,请与我们联系。