Entity Frameworkコア:同じエンティティと多対多の関係

asp.net c# entity-framework entity-framework-core

質問

私は、同じエンティティと多対多の関係をマッピングしようとしています。 Userエンティティには、 Contacts IList<User>データフィールドがあり、ユーザーの連絡先/フレンド情報が格納されます。

public class User : DomainModel
{
    public virtual IList<User> Contacts { get; protected set; }
    //irrelevant code omitted
}

私は、この多対多の関係をマップするために流暢なAPIを使用しようとすると、いくつか問題を引き起こします。どうやら、私がHasMany()user.Contactsプロパティで使用すると、次に呼び出すWithMany()メソッドがありません。 Visual Studioのインテリセンスからしか示しWithOne()ではなく、 WithMany()

modelBuilder.Entity<User>().HasMany(u => u.Contacts).WithMany() 
// gives compile time error: CS1061 'CollectionNavigationBuilder<User, User>' does not contain a definition for 'WithMany' and no extension method 'WithMany' accepting a first argument of type 

それでなぜこれが起こるのですか?この多対多の関係をマップするのに間違ったことはありますか?

人気のある回答

それでなぜこれが起こるのですか?この多対多の関係をマップするのに間違ったことはありますか?

いいえ、あなたは間違ったことはしませんでした。 それはちょうどサポートされていません 。現状こちら

結合表を表すエンティティークラスのない多対多の関係は、まだサポートされていません。ただし、多対多の関係は、結合表のエンティティ・クラスを組み込み、2つの別個の1対多の関係をマッピングすることで表現できます。

EF-Coreでは、マッピングテーブルのエンティティを作成する必要があります。 UserContacts 。コメントに記載されているように、 ドキュメントの完全な例。私は実際に以下のコードをテストしていませんが、このように見えるはずです:

public class UserContacts
{
    public int UserId { get; set; } 
    public virtual User User { get; set; }

    public int ContactId { get; set; } // In lack of better name.
    public virtual User Contact { get; set; }
}

public class User : DomainModel
{
    public List<UserContacts> Contacts { get; set; }
}

そしてあなたのmodelBuilder

  modelBuilder.Entity<UserContacts>()
        .HasOne(pt => pt.Contact)
        .WithMany(p => p.Contacts)
        .HasForeignKey(pt => pt.ContactId);

    modelBuilder.Entity<UserContacts>()
        .HasOne(pt => pt.User)
        .WithMany(t => t.Contacts)
        .HasForeignKey(pt => pt.UserId);


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ