2015-04-02 278 views
0

現在我一直試圖做太久的工作。實體框架中的一對多和一對多關係6

我有三個實體:

public class Item 
{ 
    public int ItemId { get; set; } 
    public string ItemName { get; set; } 
    public int StdVolume { get; set; } 
    public string StdUnit { get; set; } 

    public ICollection<ListItem> ListItems { get; set; } 
} 

public class ListItem 
{ 
    public int Amount { get; set; } 
    public int Volume { get; set; } 
    public string Unit { get; set; } 

    public List List { get; set; } 
    public Item Item { get; set; } 
} 

public class List 
{ 
    public int ListId { get; set; } 
    public string ListName { get; set; } 

    public ICollection<ListItem> ListItems { get; set; } 
} 

正如你可以看到我有一對許多項目和列表項,以及一對許多項目和列表項之間。

我覺得我已經試過的一切:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 

HasKey,所需要的一切。我只是不知道如何「映射」它。

任何人都可以幫忙嗎?編輯:我希望ListItem是一個弱實體,因此它的PK和FK應該是ListId和ItemId。

+0

這個模型的用例是什麼?我不明白你想要ListId和ItemId的結構。你能解釋一下樣本數據嗎? – 2015-04-02 18:24:55

回答

1

這實際上是一個多一對多的關係,您要明確地映射junction table,所以,在ListItem類,你需要添加這兩個ID屬性:

public class ListItem 
{ 
    public int ListId { get; set; } 

    public int ItemId { get; set; } 
    //... 
} 

和配置兩種關係都是這樣的:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
     modelBuilder.Entity<ListItem>().HasKey(li => new {li.ListId, li.ItemId}); 

     modelBuilder.Entity<ListItem>() 
      .HasRequired(li => li.List) 
      .WithMany(l => l.ListItems) 
      .HasForeignKey(li => li.ListId); 

     modelBuilder.Entity<ListItem>() 
      .HasRequired(li => li.Item) 
      .WithMany(l => l.ListItems) 
      .HasForeignKey(li => li.ItemId); 
}