0

私は、他のテーブルとの一対多のリレーションシップを持つテーブルを持つ EF コード ファースト モデルを持っています。

public class Note
{
  [Key]
  public Guid Id { get; set; }
  public string NoteText { get; set; }
  public string Author { get; set; }
  public DateTime? CreationDate { get; set; }
}

public class Foo
{
  public Foo()
  {
    Notes = new HashSet<Note>();
  }

  [Key]
  public Guid Id { get; set; }
  public virtual ICollection<Note> Notes { get; set; }
  // other properties ommited...
}

public class Bar
{
  public Bar()
  {
    Notes = new HashSet<Note>();
  }

  [Key]
  public Guid Id { get; set; }
  public virtual ICollection<Note> Notes { get; set; }
  // other properties ommited...
}

ご覧のとおり、 と の両方FooBarの独自のリストがありますNotesが、 aは aまたはa のNoteいずれかに属します。Foo Bar

移行をスキャフォールディングするとき、EF は と の外部キーをテーブルに作成しFooますBarNotes、これは正しくないと思います。代わりに、 と の間にリンク テーブルを作成し、 と の間FooNotes別のリンク テーブルを作成したいBarと思いNotesます。

これを自動的に行う方法はありますか?または、コード ファーストの実装でこれらのクラスを手動で作成する必要がありますか?

4

1 に答える 1

0

これは、この他の投稿ですでに回答されています! しかし、少しグーグルを節約するために、1 対多の関連付けを取得していますが、これは正しいことです。コードで多対多の関係が必要な場合は、次のことを行う必要があります。

Notes クラスで:

public class Note
{
  [Key]
  public Guid Id { get; set; }
  public string NoteText { get; set; }
  public string Author { get; set; }
  public DateTime? CreationDate { get; set; }
  public DateTime? CreationDate { get; set; }
  public virtual ICollection<Foo> Foos { get; set; }
  public virtual ICollection<Bar> Bars { get; set; }
}

お役に立てれば

于 2012-12-20T13:19:17.973 に答える