0

我有一個Person模型,它表示一個人的不同方面。在我一個人的模型,我有以下:在一個模型中創建多個表ASP.Net MVC 4

public class PersonsContext : DbContext 
    { 
     public PersonsContext() 
      : base("SiteDBCon") 
     { 
     } 

     public DbSet<Person> Persons { get; set; } 

     public DbSet<UserProfile> UserProfiles { get; set; } 
    } 

    public class Person 
    { 
     public int ID { get; set; } 
     public int Age { get; set; } 
     public string Gender { get; set; } 
     public string Race { get; set; } 
     public string Ethnicity { get; set; } 
     public int UserId { get; set; }    //User who input data 
     public UserProfile UserProfile { get; set; } //User who input data 

    } 

然而,有一些事情,一個人可以有多個條目,地址 - 電流以前,電話號碼目前從前等等。所有這些我想單獨表。我可以在PersonModel中添加這些表嗎?或者是否需要爲每個表創建一個新的模型,例如。 AddressModel,PhoneModel?他們都會和Person表有一對多的關係。如果你能做到這一點,將所有模型全部放在一個模型中是一個好主意。在過去,我創建了單獨的模型,但我質疑是否有必要。

+0

當你說「model」時,你在談論EF實體還是MVC視圖模型? –

+0

@JeradRose我正在使用實體框架進行代碼優先遷移,但我不知道「EF實體」是什麼。這不是視圖模型,因爲我將它們保存在數據庫中。這些額外的表格將存儲在數據庫,地址,電話等。 – Xaxum

回答

1

你所指的是database normalization。一般而言,只要您在模型中看到多對一或多對多的關係,就想要規範化數據。

主要問題是,一個人是否總是隻有一個地址/電話?如果是這樣,將它們保留在Person模型中可能是有意義的。如果他們可能(現在或未來)具有多個地址/電話,那麼將這些標準化爲不同模型幾乎總是最佳的。

即使您現在不需要多個地址/電話,您可能需要在某個時間點出於這個原因,大多數人會選擇將相關內容標準化。

另一個好處是,這將允許您將類型分配給您的地址(shipping/billing)和電話(cell/home/work)。

如果我是你,我會考慮設置地址和電話模式,並通過List<>(或其他IEnumerable<>)將它們與您的個人建立一對多的關係。

+0

他們將有額外的地址和電話,所以我希望他們在一個單獨的表。我的問題的根源是我可以添加一個單獨的表語句,然後在PersonModel.cs文件中的地址關聯類,或者我應該創建一個單獨的AddressModel.cs文件等。我一直創建一個單獨的文件,但想知道是否是首選/必需的方法。 – Xaxum

+0

這只是一個文件組織問題,因爲它不會影響代碼/結果。但作爲一種普遍的做法,我總是把自己的課程放在自己的檔案中。這使得查找起來更容易,並且在工作團隊工作時更容易在源代碼管理中進行管理。 –

+0

所以,如果你確實把它放在同一個文件,你將不得不添加另一個上下文語句爲地址和另一個DBSet

聲明? – Xaxum

相關問題