2012-01-04 14 views
0

私は単純なアーキテクチャ上の問題があり、いくつかのアドバイスが大好きです。エンティティフレームワークを使用したモデル設計

私はASP.NET MVC 3に精通しています。これを行うには、小さなTVショーギャラリーを練習としてコーディングしています。

マイモデルフォルダには、TvShowSeasonEpisodeクラスを含むいくつかのクラスがあります。それらは当然一緒に結ばれています:TvShowインスタンスはSeasonインスタンスと1対多の関係を持ち、SeasonインスタンスはEpisodeインスタンスと1対多の関係を持っています。

ASP.NETのEntity Frameworkを使用して、これらの1対多の関係をどのようにモデリングする必要がありますか? SeasonクラスはTvShow tvShowフィールド

オプション2は、それが模倣するため、私にはより自然に感じた - - TvShowクラスはList<Season> seasonsフィールド

  • オプション2を持っている

    • オプション1:私は2つのオプションを参照してください基礎となるデータベース設計また、MvcMusicStoreチュートリアルでMicrosoftが選択したものです。しかし、オプション1を拒否する理由があるのだろうかと思っています。データベース/ EF関連の問題やOO設計の問題です。

      思考?

  • +0

    TvShowにはシーズンが1つありますが、シーズンにはリストがあります? –

    答えて

    1

    オプション1とオプション2は実際には互換性があります;)Entity Frameworkでは、1対多関連の場合には両方を持つことができるnavigation propertiesというものがあります。

    TvShowSeasonsのリストが含まれているナビゲーションプロパティを持つことになります、とSeasonは、関連TvShowが含まれているナビゲーションプロパティを持つことになります。

    +0

    それが得られるほど簡単です。それは素晴らしいことです!私はコードファーストアプローチを使用していますので、私のモデルでオプション1と2を組み合わせるべきでしょうか? – guidupuy

    +0

    また、ナビゲーションプロパティは「再帰的」です。つまり、私の 'Episode'クラスに' TvShow'ナビゲーションプロパティを追加できますか? – guidupuy

    +0

    私は個人的にコードの最初のアプローチを使用したことはありませんが、このアプローチでナビゲーションプロパティを使用するのは簡単です。以下の質問を参照してください:http://stackoverflow.com/questions/4561079/entity-framework-ctp5-code-first-optional-navigation-property http://stackoverflow.com/questions/5534891/entity-framework-4- 1-code-first-keys-navigation-properties 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など)と異なるはずであることを忘れないでください。

    関連する問題