0

我正在嘗試創建一個快速演示商店,並且我失敗了一個optional many to one or zero關係。實體框架中可選的多對一或零問題

相關類:

  1. 項目

    public class Item 
    { 
        public int ID { get; set; } 
        public string Name { get; set; } 
        public int SubCategoryID { get; set; } 
        public virtual SubCategory Category { get; set; } 
        public double Price { get; set; } 
    } 
    
  2. 訂購

    public class Order 
    { 
        public int ID { get; set; } 
        public DateTime DateOfOrder { get; set; } 
        public virtual ICollection<Item> Items { get; set; } 
        public int CustomerID { get; set; } 
        public virtual Customer Customer { get; set; } 
    } 
    

不過,我感到困惑,因爲觀看模型顯示:

enter image description here

但是,數據庫本身顯示(物品):

enter image description here

這表明,我認爲每個項目只能屬於一個訂單。

我是否必須創建一個單獨的類,它是多個訂單/項目?

我似乎記得EF自動執行此操作,但是,我幾年沒有觸及它,我只是不記得我以前做過什麼。

+0

我認爲這將是非常直接的,但是,我試圖從這裏複製各種示例,我似乎沒有多少運氣... – wil

回答

0

我不得不添加:

​​

的項目...我永遠不會這樣調用它,但它看起來像,對於EF建立這種關係是必需的。

我相信它過去很容易,所以,讓這個問題開放,以便有人可以給出更好的答案!

+0

如果你不想要一個「訂單」屬性,你也可以使用[fluent api](https://msdn.microsoft.com/en-us/data/jj591620.aspx#ManyToMany)來配置關係:'modelBuilder.Entity ().HasMany(t => t .Items).WithMany()' – jjj

0

如果您將Orders的集合添加到Item實體,EF將爲您在數據庫中隱式創建junction table。在此page中,您可以找到有關如何配置多對多關係的更多信息。

當您需要添加額外的列(不包括您要加入的表的兩個鍵)時,通常會映射聯結表。在這種情況下,您需要分別在代表聯結表的實體和OrderItem之間創建兩個一對多關係。有些人建議總是映射聯結表,因爲這樣你可以將所有表表示爲實體,並且可以從聯結表開始編寫查詢。您可以在此link中找到關於此主題的有趣信息。但是,根據我的經驗,在大多數情況下,您可以完美地工作,而無需明確地繪製交接表。