2013-10-27 55 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