使用EF Fluent API映射我的实体关系时,是否需要映射所涉及的两个实体?

时间:2015-01-19 17:25:26

标签: c# .net entity-framework ef-fluent-api

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

我想知道并且没有找到回复搜索,是否需要在其两端定义关系。

我的意思是,如果我有一个名为User and 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");
        });

1 个答案:

答案 0 :(得分:1)

是的,这些定义就足够了。您正在使用单个语句定义关系的两个方面:

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

.HasRequired定义了1侧,而.WithMany定义了Many侧。只有一种关系,但有两个方面。您可以从任何一方定义关系,但不必从两者定义它。