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 は、同じページまたは別のページのどちらかコーディングしやすい方で完了できます。