2016-03-21 51 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/