2016-03-21 217 views
1

我有一个包含关于包(载体,重量..)信息的包表。实体框架 - 多对多

我想要的产品为包装关联,所以我做了以下内容:

public class Package 
{ 
    public int ID { get; set; } 
    public Order Order { get; set; } 
    public int Weight { get; set; } 
    public List<Product> Products { get; set; } 
} 

发生了什么事是,它增加的package_id到产品表,但是这是一个多对多的关系。如果可能的话,我如何维护包表中的产品列表,但是知道它是多对多的?

谢谢。

+0

你需要加入引用包ID和产品ID表创建一个许多人许多。 orm可以透明地支持这个或者与一个单独的实体。 –

+0

您没有展示如何填充Package.Products列表? 这一切都取决于你lambda表达式,它应该只返回该包内的产品列表。多对多关系是如何强加的?你有桌子吗? – DaniDev

回答

0

如果要打包有很多与产品一对多的关系,加上它来代替名单

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

在产品表中添加此行

public virtual ICollection<Package> Packages {get;set;} 

EF会创建一个新表命名为ProductsPackages。每行代表一艘彼此相互关联的船。

0

实体框架中的多对多关系通过联结表创建。您可以通过映射关系来创建它们,也可以自己创建交接表。

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 

modelBuilder.Entity<Package>() 
      .HasMany<Product>(s => s.Products) 
      .WithMany(c => c.Packages) 
      .Map(cs => 
        { 
         cs.MapLeftKey("PackageRefId"); 
         cs.MapRightKey("ProductRefId"); 
         cs.ToTable("PackageProduct"); 
        }); 

} 

自己创建表:

public class PackageProduct 
{ 
    public virtual Package Package { get; set; } 
    public virtual Product Product { get; set; } 
} 

吉米·博加德讨论使用哪种方法: https://lostechies.com/jimmybogard/2014/03/12/avoid-many-to-many-mappings-in-orms/