代码先一到多视图模型查看

本文关键字:模型 视图 代码 | 更新日期: 2023-09-27 18:37:03

>using 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 可以在相同或不同的页面上完成,以更容易编码的页面为准。

代码先一到多视图模型查看

嘿,

我还没有从事手机开发工作,但这一切都涉及几乎相同的逻辑尝试使用Fluent API,您可以在此处阅读更多信息

现在你想做的是首先让你们的两个类都公开,很多使用它的人可能会忘记它,所以这就是为什么我不得不说,但你已经有了它,这很好:)所以一个名字可以有很多号码(电话?

namespace AddressBook.Models
{
    public class Name
    {
        public Name ()
        {
          PhoneList = new List<Phone>(); // just so you wont end up with a null reference if you have not yet provided any data.
        }
        public int NameID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        //ref
        public virtual ICollection<Phone> Phones { get; set; }  //added the virtual
    }
}

现在到你的手机课

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

现在,在OnModelCrating上,您可以说出需要什么,以及具有许多:)像这样的东西

Protected override void OnModelCrateing(DbModelBuilder modelBuilder)
{
  mobelbuilder.Entity<Name>().HasRequired<Phone>.(n=>n.ID).WithMany(n=>n.PhoneList).HasForeignKey(n=>n.NameID);
}

这么好的东西应该是好:)

祝您编码愉快!

干杯!