1

このチュートリアルの指示に従って、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");
        });
4

1 に答える 1

1

はい、これらの定義で十分です。単一のステートメントで関係の両側を定義しています。

.Entity<Organization>().HasRequired(o => o.Owner).WithMany(u => u.OrganizationsOwned)

.HasRequired は 1 側を定義し、.WithMany は多側を定義します。関係は 1 つだけですが、2 つの側面があります。どちらの側からでもリレーションシップを定義できますが、両方から定義する必要はありません。

于 2015-01-19T19:11:04.527 に答える