【问题标题】:When using EF Fluent API to map my entities relationships, do I need to map on both entities involved?使用 EF Fluent API 映射我的实体关系时,是否需要同时映射所涉及的两个实体?
【发布时间】:2015-01-20 03:11:04
【问题描述】:

我正在按照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");
        });

【问题讨论】:

  • 你为什么不试试呢?然后,在搜索时,您应该已经看到很多示例,只有一个映射语句用于双向关系(我也通过它来回答您的问题)。
  • 我试过了,但是在运行服务时没有抛出任何错误或异常,因为我对我的实现感到怀疑,因为我对 AutoMapper 的使用不太熟悉。

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


【解决方案1】:

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

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

.HasRequired 定义 1 面,.WithMany 定义多面。只有一种关系,但有两个方面。您可以从任一方定义关系,但不必从双方都定义。

【讨论】:

  • 我的另一个疑问是在处理枚举类型属性时是否需要任何 AutoMapper 配置?
  • @UrielArvizu - AutoMapper 永远不需要使用 EF。
  • 我的错误,我的意思是 Fluent API,对不起,我刚刚开始使用 Azure 移动服务,由于同时使用了 Fluent API 和 AutoMapper,我倾向于将它们混合使用。那么在处理枚举类型属性时,是否需要使用 Fluent API 定义配置?
  • @UrielArvizu - 不,EF 将检测代码中的枚举。见msdn.microsoft.com/en-us/data/hh859576.aspx
  • 所以我只需要使用 AutoMapper 定义我的映射,其余的由 EF 完成,不受 Fluent API 的影响?
猜你喜欢
  • 2019-11-28
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
  • 2019-01-14
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 2015-10-03
相关资源
最近更新 更多