2017-06-11 4 views
0

私はクラスEntity Frameworkのコードファーストワンクラスのプロパティと一覧が

public class Movie 
{ 
    public int Id { get; set; } 

    public string Title { get; set; } 

    public Person Director { get; set; } 

    public virtual ICollection<Person> Actors { get; set; } 
} 

とクラスを持つエンティティフレームワークのコードの最初のアプローチ

を使用してい

public class Person 
{ 
    public int Id { get; set; } 

    public string Name { get; set; } 
} 

データベースを作成すると、テーブルMoviesIdTitleDirector_Id、テーブルは、IdおよびNameである。 Movie_IdおよびActor_Id

テーブルを持つテーブルMovies_Personsが必要ですか?

答えて

1

あなたの問題は、人物クラスに人には複数のムービーが存在する可能性があるということです。あなたのエンティティは、両方のあなたのクラスが他のクラスに複数の参照を持つことができることを知っている

public virtual ICollection<Movie> Movies { get; set; } 

:あなたのPersonクラスに次の行を追加することによってそのよう

。 この要件を満たすために、Entity FrameworkはMovie_IDPerson_IDという3番目のテーブルを作成します。

あなたはより多くの情報がちょうど探したい場合: Entity Frameworkの -

または、このリンクをたどって、多くの関係に多く: http://www.entityframeworktutorial.net/code-first/configure-many-to-many-relationship-in-code-first.aspx

ます場合は、あまりにもそのページ上の他のarticelsをチェックアウトすることができますエンティティフレームワークの初心者です。

更新日: 私はあなたの人のテーブルへの別の参照が既にあります。 ここでは、エンティティフレームワークに、流暢なAPIによって2つのテーブルを参照する方法を伝える必要があります。 this stackoverflow answerをご覧ください。それはトリックを行う必要があります。 このコードをお客様のに挿入する必要があります。OnModelCreatingDbContextクラスの機能。

だからあなたの最終的なコードは次のようになります。

public class Movie 
{ 
    public int Id { get; set; } 

    public string Title { get; set; } 

    public virtual Person Director { get; set; } 

    public virtual ICollection<Person> Actors { get; set; } 
} 

public class Person 
{ 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public virtual ICollection<Movie> Movies_Actors { get; set; } 

    public virtual ICollection<Movie> Movies_Directors { get; set; } 
} 

そして、あなたのOnModelCreatingに次のコードを追加します。

modelBuilder.Entity<Movie>() 
      .HasMany(a => a.Actors) 
      .WithMany(a => a.Movies_Actors) 
      .Map(x => 
      { 
       x.MapLeftKey("Movie_ID"); 
       x.MapRightKey("Person_ID"); 
       x.ToTable("Movie_Actor"); 
      }); 

modelBuilder.Entity<Movie>() 
.HasRequired<Person>(s => s.Director) 
.WithMany(s => s.Movies_Directors); 

を私はコードをテストする可能性を持っていないが、そのトリックを行う必要があります。 これを動作させるために調整が必要な場合は、コメントにコメントを追加してください。そうすれば、他の人が利益を得ることができます。

+0

動作しません。これはPerson内にMovie_Idという列を作成するだけです。私がDirectorを削除した場合、私は中間のテーブルを取得しますが、Directorのプロパティがある場合は機能しません。 –

+0

申し訳ありません。私はそれに応じて私の答えを更新しました。 – BabbleGum

+0

ありがとうございました。出来た! –

関連する問題