2013-06-03 50 views
1

一個用於customer,另一個用於address實體框架代碼第一個客戶和地址註冊

所需功能當客戶註冊時,他們在同一視圖中輸入他們的個人詳細信息,如姓名,電話以及他們的地址詳情。

當前功能 目前,EF腳手架提供了一個可供選擇的地址下拉列表。

目前代碼

public class Customer 
{ 
    public int CustomerId { get; set; } 
    public string FirstName { get; set; } 
    [Required] 
    public string Surname { get; set; } 
    [Required] 

    ... 
    Customer Fields 
    ... 

    public int AddressId { get; set; } 

    public virtual Address Address { get; set; } 
} 

public class Address 
{ 
    [Key] 
    public int AddressId { get; set; } 

    ... 
    Address Fields 
    ... 

    // Navigation Properties 
    public virtual List<Customer> Customer { get; set; } 
} 

當無慾無求的數據庫,我可以這樣做如下:

new List<Customer> 
    { 
     new Customer 
      { 
       ** Customer Fields ** , 
       Address = new Address { ** Address Fields ** } 
      } 
    }.ForEach(c => context.Customers.Add(c)); 
base.Seed(context); 

我的想法

我最初的想法是,我應該創建一個名爲CustomerWithAddress的第三數據模型,它本質上是一個組合ite customeraddress模型。這可以讓我搭建一個強類型的視圖。

或者,控制器是否可以將2個模型傳遞給1個視圖?

我不知道這是解決這個問題的最好方法,或者實際上如果可能的話。有什麼想法嗎?

回答

0

如果您的客戶模式有地址屬性,那麼您將能夠從您的視圖中訪問它。例如

@Html.DisplayTextFor(x => model.Address.Addressline1) 

您的viewmodel Idea是一個好主意,但對於這種特殊情況沒有必要。

編輯:正如我下面的朋友指出的,如果您使用延遲加載,則可能需要手動加載Address屬性。

+0

這可能需要使用'.Include()'來實際加載'Address'屬性;如果EF是延遲加載的東西,那麼'model.Address'在到達視圖時可能爲空。 – anaximander

+0

好點。我會做筆記。 –

相關問題