多対多に直接マッピングすることはできません。ジャンクションテーブルにフィールドを追加し、アプリケーションでそのフィールドにアクセスする場合は、代わりにジャンクションテーブルをエンティティに昇格させ、2つの1対多の関係を使用する必要があります。
public class Badge {
...
public virtual ICollection<UserBadge> UserBadges { get; set; }
}
public class User {
...
public virtual ICollection<UserBadge> UserBadges { get; set; }
}
public class UserBadge {
public int UserId { get; set; }
public int BadgeId { get; set; }
public string B { get; set; }
public virtual Badge Badge { get; set; }
public virtual User User { get; set; }
}
UserBadge
Fluent-APIまたはデータアノテーションのいずれかで実行する必要があるテーブルのキーを除いて、デフォルトの規則でマッピングを正しく定義する必要があります。
modelBuilder.Entity<UserBadge>().HasKey(e => new { e.UserId, e.BadgeId });