1

1 つは 用customer、もう 1 つは 用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基本的にcustomeraddressモデルの合成である と呼ばれる 3 番目のデータ モデルを作成する必要があるということです。これにより、強く型付けされたビューを足場にすることができます。

あるいは、コントローラが 2 つのモデルを 1 つのビューに渡すことは可能ですか?

これがこの問題に取り組む最善の方法なのか、実際に可能かどうかはわかりません。何かご意見は?

4

1 に答える 1

0

顧客モデルにアドレス プロパティがある場合は、ビューからアクセスできます。例えば

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

あなたのビューモデルのアイデアは良いものですが、この特定のケースでは必要ありません。

編集: 以下の私の友人が指摘したように、遅延読み込みを使用している場合は、 Address プロパティを手動で読み込む必要がある場合があります。

于 2013-06-03T13:45:43.573 に答える