2012-01-04 5 views
0

나는 간단한 건축 학적 질문을 가지고 있으며 몇 가지 조언을 원합니다.엔티티 프레임 워크를 사용한 모델 디자인

ASP.NET MVC 3에 익숙해 지려고합니다. 이렇게하려면 작은 TV 쇼 갤러리를 연습으로 코딩하고 있습니다.

내 모델 폴더에는 TvShow, SeasonEpisode 클래스를 비롯한 여러 클래스가 있습니다. 그것들은 자연스럽게 묶여 있습니다 : TvShow 인스턴스는 Season 인스턴스와 일대 다 관계를 가지며 Season 인스턴스는 Episode 인스턴스와 일대 다 관계를 갖습니다.

ASP.NET의 Entity Framework를 사용하면 이러한 일대 다 관계를 어떻게 모델링해야합니까? 나는 2 옵션을 참조하십시오

  • 옵션 1 - Season 클래스 옵션 2가 있기 때문에 모방 나에게 더 자연스러운 것 같다

TvShow tvShow 필드가 - TvShow 클래스는 List<Season> seasons 필드

  • 옵션이있다 기본 데이터베이스 설계 또한 MvcMusicStore 자습서에서 Microsoft가 선택한 것입니다. 그러나 데이터베이스/EF 관련 문제 또는 OO 설계 문제에 대해 옵션 1을 거부 할 이유가 있는지 궁금합니다.

    생각하십니까?

  • +0

    분명히 TvShow에는 단일 시즌이 있고 시즌에는 목록이 있습니다. ? –

    답변

    1

    옵션 1과 옵션 2는 실제로 호환 가능합니다.) Entity Framework에는 일대 다 연관의 경우에 둘 다를 가질 수있는 navigation properties이라는 것이 있습니다.

    TvShowSeasons의 목록을 포함하는 탐색 속성이되며, Season는 관련 TvShow 포함하는 탐색 속성이 있습니다.

    +0

    아주 간단합니다. 멋지다!코드 첫 번째 접근법을 사용하고 있으므로, 모델 1에서 옵션 1과 2를 결합해야합니다. – guidupuy

    +0

    또한 탐색 속성이 "재귀 적"입니까? 즉, 'TvShow' 탐색 속성을 내'Episode' 클래스에 추가 할 수 있습니까? – guidupuy

    +0

    필자는 개인적으로 코드 접근법을 처음 사용하지는 않았지만이 접근법에서는 탐색 속성을 사용하는 것이 간단해야합니다. 다음과 같은 질문을 참조하십시오 : http://stackoverflow.com/questions/4561079/entity-framework-ctp5-code-first-optional-navigation-property http://stackoverflow.com/questions/5534891/entity-framework-4- 1- 코드 - 첫 - 키 - 탐색 - 속성 http://stackoverflow.com/questions/6144163/entity-framework-4-1-code-first-navigation-property-not-loading-when-only-the-i – ken2k

    0

    상기와 같이 두 가지를 모두 사용해야합니다.

    모델을 조작하고 객체 추상화 만한다는 것을 잊지 말고 저장 방법을 나타내지는 않습니다. TvShow는 Seasons 목록이있는 속성을 가지고 있고 한 시즌은 부모 TvShow를 참조하는 속성을 가지고있는 것이 자연 스럽습니다.

    이 관계에서 유일하게 중요한 것은 누가 업데이트 책임자인지입니다.

    public class SeasonConfiguration : EntityTypeConfiguration<Season> 
    { 
        internal SeasonConfiguration() 
        { 
         this.HasRequired(s => s.Show) 
          .WithMany(tv => tv.Seasons) 
          .HasForeignKey(s => s.TvShowId); 
        } 
    } 
    

    의미 체계는 가장 자연스러운 것은 아니지만 그것은 그런 식으로 작동합니다

    public class TvShow 
    { 
        public int Id {get;set;} 
        public virtual ICollection<Season> Seasons {get;set;} 
    } 
    
    public class Season 
    { 
        public int Id {get;set;} 
        public int TvShowId {get;set;} 
        public virtual TvShow Show {get;set;} 
    } 
    

    는 그런 다음 구성 파일로 매핑 도움이 될 것입니다

    당신은 그런 일이 있어야합니다.

    ASP.NET MVC를 배우고 있다면 여기에서 모델 및 매핑이 무엇인지 정의하는 것이보기에서 사용하려는 것과 다를 수 있습니다 (예 : ViewModel)

    관련 문제