2016-09-26 5 views
0

내가 MVC에 새로 온 사람과 내가MVC 모델 및 DB에서 5 객체 저장

Model Teams 
int TeamID 
string Team_Name 

Model Players 
int PlayerID 
string PlayerName 

지금 나는에 저장된 정보를 원하는 예제보기에 표시 할 다른 모델을 연결하는 방법을 해결하려고 노력하고있다 데이터베이스 그래서 두 가지를 연결하는 방법에 대해 갈까요?

그래서 플레이어 모델에서 내가 사용할 수 있습니다 Team Team or int TeamID

Team_ID 나는 DB 테이블에 저장하지만 플레이어의 목록을 당겨 때 어떻게 든 팀 테이블을 포함 할 수 있습니다. 또는 TEAM Team 나는 modelItem.team.team_name에 의해 팀 이름을 볼 수 있지만 데이터베이스에 TEAM 개체를 저장할 수 없습니다.

나는 이것이 MVC의 관점에서 기본이지만, 내 머리를 잡으려고 고심하고 있다는 것을 알고있다.

어떤 제안이나 솔루션 링크가 있습니까?

답변

1

귀하의 엔티티 클래스 같은 것을 보일 것입니다 : Player의 인스턴스와, 그와

public class Team 
{ 
    [Key] 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public virtual ICollection<Player> Players { get; set; } 
} 

public class Player 
{ 
    [Key] 
    public int Id { get; set; } 

    public string Name { get; set; } 

    [ForeignKey("Team")] 
    public int TeamId { get; set; } 
    public virtual Team Team { get; set; } 
} 

을 간단히 수행 할 수 있습니다

player.Team.Name 

팀의 이름을 얻으려면. 당신은 당신을 반복하고 플레이어의 모음이있는 경우, 당신은 열심히 Team 먼저로드해야합니다, 그래서 당신은 N + 1 개 쿼리와 끝까지하지 않습니다

var players = db.Players.Include(m => m.Team).ToList(); 

당신이 다른 길을 갈 필요가 있다면, , 당신은뿐만 아니라 Team의 인스턴스에서 플레이어의 목록을로드 할 수

var players = team.Players.ToList(); 

을 마찬가지로, 당신은 열심히 쿼리를 최소화하기 위해 선수를로드 할 수

var team = db.Teams.Include(m => m.Players).SingleOrDefault(m => m.Id == teamId); 

을 가치가있는 것, 학급과 건물 이름은 관습에 어긋납니다. 필자가 제공 한 샘플 코드의 클래스 및 속성 이름을 확인하십시오. 엔티티 클래스의 이름은 항상 이 아니고 Teams이 아니어야합니다. 속성 이름은 파스칼 방식으로 함께 실행해야합니다. LikeThis, LikeThis 또는 Like_This. 또한 속성 이름에 클래스 이름을 포함하는 반 패턴입니다. Name 속성은 예를 들어 Team에 속하므로 물론 팀 이름입니다. 접두사가 Team (TeamName) 인 영점이 있으며 코드가 더 장황 해집니다. 예를 들어, 어느 것이 더 읽기 : team.Name 또는 team.TeamName?