2013-10-27 56 views
0

使用C#,VS2012,MVC4,CodeFirstCodeFirst一对多视图模型查看

我读到这里吨的职位和其他地方大约一对多一个视图模型,但我不能完全得到它。

我有一个程序,地址簿,有两个表,名称和电话。对于每个名字,你可以有很多数字。

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); 
     } 

用户应该能够在手机上表中详细进行一次CRUD查看选定名称的记录。电话CRUD可以在相同或不同的页面上完成,无论哪一个更容易编码。

回答

0

嘿,我还没有对手机开发工作还没有,但是这一切都几乎相同的逻辑 尝试用流利的API,你可以阅读更多关于here

现在你想要做什么

通过启动使你的两个类公开大量的人工智能与此可以忘记它,所以这就是为什么我不得不说它,但你已经它已经和那很好:) 所以名称可以有很多数字(电话?)

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 
    } 
} 

现在到您的pho NE类

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); 
} 

东西这个漂亮的应该是不错的:)

玩得开心编码队友!

干杯!

+0

哦,我在做互联网应用程序开发,而不是电话。但我确实希望稍后再做。感谢你的回答;给我几个,我会深入检查一下。 –

+0

我写的是针对Web应用程序:)是啊,慢慢来。只要告诉我我的代码是否适合你,或者至少是否对你有帮助! 干杯! – photowalker

+0

它为你工作? – photowalker