私は1つのエンティティを持っており、2つの多対多リレーションシップを作成したいと考えています。私のエンティティは次のとおりです。EFコードFirst - Fluent API - Many To Manyリレーションシップ - テーブルを作成しない
public class User : IdentityUser
{
private ICollection<User> users;
private ICollection<User> followers;
private ICollection<User> followings;
public User()
{
this.Users = new HashSet<User>();
this.Followers = new HashSet<User>();
this.Followings = new HashSet<User>();
}
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual ICollection<User> Users
{
get { return this.users; }
set { this.users = value; }
}
public virtual ICollection<User> Followers
{
get { return this.followers; }
set { this.followers = value; }
}
public virtual ICollection<User> Followings
{
get { return this.followings; }
set { this.followings = value; }
}
}
マイコンフィギュレーション・クラスは次のようになります。
public class UserMap : EntityTypeConfiguration<User>
{
public UserMap()
{
Property(u => u.FirstName).HasMaxLength(50).IsRequired();
Property(u => u.LastName).HasMaxLength(50).IsRequired();
HasMany<User>(u => u.Users).WithMany(f => f.Followers).Map(m =>
{
m.ToTable("UserFollower");
m.MapLeftKey("UserId");
m.MapRightKey("FollowerId");
});
HasMany<User>(u => u.Users).WithMany(f => f.Followings).Map(m =>
{
m.ToTable("UserFollowing");
m.MapLeftKey("UserId");
m.MapRightKey("FollowingId");
});
}
}
このコードは、一つだけのテーブルUserFollowing
の代わりに、二つのテーブルUserFollowing
とUserFollower
を作成します。テーブルの場所を入れ替えたら、UserFollower
しか得られません。 2番目のテーブルが最初のテーブルを上書きするようです。私は移行とデータベースを削除しようとしましたが、私はまだ同じ結果を得ています。
なぜ誰が起こっているのでしょうか?
UserMapのコンストラクタには、FollowersまたはFollowingsを作成するかどうかを示すパラメータが必要です。ユーザーマップは現在フォロワーを作成しており、オブジェクトをフォローイングで上書きしています。 – jdweng