使用 C#、VS2012、MVC4、CodeFirst
我已经在这里和其他地方阅读了大量关于一对多视图模型的帖子,但我不太明白。
我有一个程序,地址簿,有两个表,名称和电话。对于每个名称,您可以有多个数字。以下型号:
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; }
}
我的详细视图模型:
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);
}
用户应该能够在选定名称记录的详细信息视图中对电话表执行一次 CRUD。电话 CRUD 可以在相同或不同页面上完成,以更容易编码为准。