0

私はこれら 2 つのクラスをセットアップしており、Entity Framework が一連のエンティティに対して多対多のリレーションシップ テーブルを自動的に作成するようにしたいと考えています。

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

    public ICollection<Event> SignedUpEvents { get; set; }
    public ICollection<Event> CompletedEvents { get; set; }
}

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

    public ICollection<User> SignedUpUsers { get; set; }
    public ICollection<User> CompletedUsers { get; set; }
}

これは何もしません。私の推測では、指定された 2 つのリレーションシップがあり、どちらも同じエンティティ タイプが含まれているため、EF は 2 つを区別できません。

これを実現する方法はありますか?結果のテーブルに名前を付けるための DataAnnotation などでしょうか。

4

1 に答える 1

1

ええ、問題はあなたが言うように、「イベント」のコレクションが 2 つあるということです。

DataAnnotations を使用してデュアル ナビゲーション プロパティを設定できますが、私の個人的な好みはモデル ビルダーを使用することです。これにより、poco クラスがクリーンに保たれ、不要な参照が回避されます。

モデル ビルダーの使用方法と EF ナビゲーション プロパティのしくみに関するチュートリアルを作成しました。これは、より深く理解するために読むことをお勧めします。

単純な観点から、次のようなものが必要です。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<User>().HasMany(e => e.SignedUpEvents)
                .WithMany(e => e.SignedUpUsers);            
            modelBuilder.Entity<User>().HasMany(e => e.CompletedEvents)
                .WithMany(e => e.CompletedUsers);
        }
于 2012-08-27T10:07:47.083 に答える