1

我正在按照本教程中的说明使用 Code First 和 EF Fluent API 创建实体关系,以在我的模型中创建 1:n 和 m:n 关系。

我想知道并且没有找到响应搜索的是,是否需要定义它两端的关系。

我的意思是,如果我有一个名为 User 和 Organization 的实体,则有两个关系涉及这两个实体,如下所述:

  • 一个用户可以有多个组织,而一个组织必须由一个用户拥有。
  • 一个用户可能存在于许多组织中,而一个组织中可能有许多用户。

考虑到这一点,我使用 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 定义了 Many 面。只有一种关系,但有两个方面。您可以从任一方定义关系,但不必从双方定义。

于 2015-01-19T19:11:04.527 回答