このチュートリアルの指示に従って、EF Fluent API で Code First を使用してエンティティの関係を作成し、モデルで 1:n および m:n の関係を作成しています。
私が疑問に思っていて、検索で応答が見つからなかったのは、その両端で関係を定義する必要があるかどうかです。
つまり、ユーザーと組織というエンティティがある場合、以下で説明するように、これら 2 つのエンティティに関連する 2 つの関係があります。
- ユーザーは複数の組織を持つことができますが、組織は 1 人のユーザーが所有する必要があります。
- ユーザーは多くの組織に存在する場合がありますが、組織には多くのユーザーが存在する場合があります。
これを念頭に置いて、Fluent API を使用して次のようにリレーションシップを定義しました。
modelBuilder.Entity<Organization>().HasRequired(o => o.Owner).WithMany(u => u.OrganizationsOwned).WillCascadeOnDelete(false);
modelBuilder.Entity<User>().HasMany<Organization>(u => u.Organizations).WithMany(o => o.Users).Map(uo =>
{
uo.MapLeftKey("UserId");
uo.MapRightKey("OrganizationId");
uo.ToTable("OrganizationsUsers");
});
しかし、これらの定義で十分でしょうか? それとも、エンティティの反対側でも関係を定義する必要がありますか? つまり、次のコードを追加する必要がありますか?
modelBuilder.Entity<User>().HasMany(u => u.OrganizationsOwned).WithRequired(o => o.Owner).WillCascadeOnDelete(false);
modelBuilder.Entity<Organization>().HasMany<User>(o => o.Users).WithMany(u => u.Organizations).Map(ou =>
{
ou.MapLeftKey("UserId");
ou.MapRightKey("OrganizationId");
ou.ToTable("OrganizationsUsers");
});