-1

C#、VS2012、MVC4、CodeFirst を使用

ビューモデルを使用した1対多について、ここや他の場所でたくさんの投稿を読みましたが、まったくわかりません。

Name と Phone という 2 つのテーブルを持つ AddressBook プログラムがあります。名前ごとに、多数の番号を指定できます。以下のモデル:

namespace AddressBook.Models
{
    public class Name
    {
        public int NameID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }

        //ref
        public ICollection<Phone> Phones { get; set; }
    }
}

namespace AddressBook.Models
{
    public class Phone
    {
        public int ID { get; set; }
        public string Number { get; set; }

        //ref
        [Required]
        public int NameId { get; set; }
        public Name Name { get; set; }

    }
}

そして私の文脈:

public class ContactDBContext : DbContext
    {
        public DbSet<Name> Names { get; set; }
        public DbSet<Phone> Phones { get; set; }
    }

私のDetailViewModel:

public class DetailViewModel
    {
        public Name ID { get; set; }
        public Name FirstName { get; set; }
        public Name LastName { get; set; }

        public List<Phone> Number { get; set; }
    }

今私のコントローラー、私は立ち往生し始めています。電話のリストを呼び出すことはできますが、分離された名前レコードを取得できないようです。

public ActionResult Details(int id = 0)
        {
            DetailViewModel dvm = new DetailViewModel();

            dvm.FirstName = (from n in db.Names select n).Where(m => m.NameID == id).ToString();
            dvm.LastName = (from n in db.Names where n.NameID == id select n).ToString();
            dvm.Number = (from n in db.Phones select n).Where(m => m.NameId == id).ToList();
            //tried a couple of different things

            return View(dvm);


            //Name name = db.Names.Find(id);
            //if (name == null)
            //{
            //    return HttpNotFound();
            //}
            //return View(name);
        }

ユーザーは、選択した名前レコードの詳細ビューで、Phone テーブルに対して CRUD を 1 回実行できる必要があります。Phone CRUD は、同じページまたは別のページのどちらかコーディングしやすい方で完了できます。

4

1 に答える 1