使用 EF Fluent API 映射我的实体关系时,是否需要映射涉及的两个实体?
When using EF Fluent API to map my entities relationships, do I need to map on both entities involved?
我正在按照 this tutorial 的说明使用 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");
});
是的,这些定义就足够了。您正在使用单个语句定义关系的双方:
.Entity<Organization>().HasRequired(o => o.Owner).WithMany(u => u.OrganizationsOwned)
.HasRequired定义1面,.WithMany定义Many面。只有一种关系,但有两个方面。您可以从任一侧定义关系,但不必从两侧定义。
我正在按照 this tutorial 的说明使用 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");
});
是的,这些定义就足够了。您正在使用单个语句定义关系的双方:
.Entity<Organization>().HasRequired(o => o.Owner).WithMany(u => u.OrganizationsOwned)
.HasRequired定义1面,.WithMany定义Many面。只有一种关系,但有两个方面。您可以从任一侧定义关系,但不必从两侧定义。