2011-12-12 4 views
2

이 같은 모델을 가지고있다.MVC 여러 모델

일대 다 관계의 예제가 많이 있지만 그와 같은 것은 없습니다.

질문은 다음과 같습니다. 어떻게 해당 위치에 대한 모든 위치 및 팀을 가진 Client 개체를 얻으려고합니까?

이전 SQL로, 나는 각 나에게 행을 준 것 모든 테이블에 가입 한 것이지만, 심지어 뷰 모델이

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
그들을 :(결합으로, 그것을 할 수없는 것

데이터 또는 도메인 모델을 UI 또는보기 모델과 혼동하는 것 같아요. 일반적으로 같은 것은 아닙니다.

이유는보기 모델이 더 단순한 경향이 있고 표시하는 데 필요한 데이터 만 제공하기 때문입니다. 특정보기. 모든 포스트 백 요청시 뷰 모델이 모델 바인더에 의해 다시 만들어지기 때문에 이는 중요합니다. 매우 복잡한 모델을 작성하면 모델 바인더를 만들기가 매우 어렵습니다.

또한 모델을 잘못 생각한 것입니다. 고객은 팀과 아무런 관계가 없습니다. 이것은 "일대일에서 많은 것"이 아니라 두 가지 관계, 즉 1 대 다수입니다. 클라이언트는 위치와 관련이 있습니다. 위치는 팀과 관련이 있습니다. 고객은 위치를 통하지 않고 팀과 관련이 없습니다.

그래서 클라이언트에는 단순히 위치 모음이 있습니다. 위치에는 팀이 있습니다. 팀의 위치에 대한 단일 참조가있을 수 있으며 위치에는 클라이언트에 대한 단일 참조가 있습니다. 그게 전부 야.

+0

아, 알았어. 나는 잘못된 용어로 생각하고있다. 컨트롤러에서 뷰로 모든 팀을 돌려 보내는 경우, 내가 지적한대로 일대일 역순으로 전체 관계를 목록으로 출력 할 수 있습니다. – user1094145

+0

클라이언트가 위치 정보를 가질 수없는 (있을 수는 없지만 가능할 수도 있음) 위치에 위치 정보가없는 상황이있을 수 있습니다. 중첩 된 foreach 루프의로드가 모델을 통과하여 위치 또는 팀이> 0인지 확인하고있는 경우이를 출력하고, 그렇지 않으면 빈 셀을 넣는 것으로 생각할 수 있습니다. – user1094145

+0

모델을 변경하기로 결정했습니다. 감사. – user1094145