2011-12-12 40 views
2

我有这样一个模型:MVC多个模型与孩子的关系

客户 - 其中有许多地方 - 它可以有很多球队,一种一个一对多一对多的关系。

我可以找到许多一对多关系的例子,但没有一个这样的例子。

现在的问题是:如何获取客户端对象以及这些位置的所有位置和团队?

此前,有SQL,我会加入这将给予我行对每一所有表,但我似乎无法做到这一点,即使有一个ViewModel将它们组合起来:(

public class Client 
    { 
     private System.Guid _id; 

     [HiddenInput(DisplayValue = false)] 
     public System.Guid ClientId { 
      get 
      { 
       if (_id == null || _id == Guid.Empty) 
        _id = Guid.NewGuid(); 
       return _id; 
      } 
      set 
      { 
       _id = value; 
      } 
     } 

     [Required(ErrorMessage = "The Client Name is required")] 
     public String Name { get; set; } 

     public virtual ICollection<Location> Locations { get; set; } 
    } 

public class Location 
    { 
     private System.Guid _id; 

     [HiddenInput(DisplayValue = false)] 
     public System.Guid LocationId { 
      get 
      { 
       if (_id == null || _id == Guid.Empty) 
        _id = Guid.NewGuid(); 
       return _id; 
      } 
      set 
      { 
       _id = value; 
      } 
     } 


     [Required(ErrorMessage = "The Site Name is Required")] 
     public String Name { get; set; } 

     [Required(ErrorMessage = "The Address is required")] 
     public String Address { get; set; } 

     [Required(ErrorMessage = "The Postcode is required")] 
     public String Postcode { get; set; } 

     public virtual ICollection<EngagementTeam> Teams { get; set; } 
    } 

public class EngagementTeam 
    { 
     private System.Guid _id; 

     [HiddenInput(DisplayValue = false)] 
     public System.Guid EngagementTeamId { 
      get 
      { 
       if (_id == null || _id == Guid.Empty) 
        _id = Guid.NewGuid(); 
       return _id; 
      } 
      set 
      { 
       _id = value; 
      } 
     } 


     [Required(ErrorMessage = "The Team Name is required")] 
     public String Name { get; set; } 

     public virtual ICollection<Person> Members { get; set; } 
    } 
+1

无关:在构造函数中生成主键('Guid.NewGuid()')来清理代码。 – Ryan

回答

2

我认为你的数据或域模型与你的用户界面或视图模型相混淆,它们通常不是同一个东西

原因是视图模型往往比较简单,只提供显示所需的数据这是非常重要的,因为视图模型会在每个回发请求中被模型联编程序重新创建,如果你是一个非常复杂的模型,那么这个使模型联编程序非常难以创建。

你也在考虑你的模型错了。客户与团队没有任何关系。这不是一对多对多的关系,这是两对多的关系。客户与地点有关。地点与团队有关。除了通过地点之外,客户与团队无关。

因此,您的客户只需拥有一个位置集合。而你的位置有一组团队。您的团队可能会对其位置进行一次引用,而您的位置将只有一个引用它的客户端。而已。

+0

啊,我想我明白了。我在错误地思考。如果我将所有团队从控制器传回给视图,那么我将能够在您指出的反向一对一匹配中以列表形式输出整个关系。 – user1094145

+0

还有一个问题,即客户可能没有位置(不太可能,但可能),并且绝对是位置可能没有任何团队的情况。我能想到的是,如果是嵌套的foreach循环的负载来遍历模型,检查每个点上的位置或团队是否> 0,并输出它,否则将空白单元格。 – user1094145

+0

决定改变模型。谢谢。 – user1094145