EF Core:在两个表之间具有一对一和一对多的关系

时间:2021-06-22 17:21:15

标签: c# entity-framework-core

背景

  • 我需要创建一个端点来获取用户的外出 (OOO) 详细信息
  • 每个 OOO 详细信息还将有一个备用联系人详细信息,该详细信息也是 user 类型
  • 一个用户可以拥有多个 OOO 详细信息,但是每个 OOO 详细信息将只属于一个主要联系人和一个备用联系人(用户类型)

为此,我创建了两个实体对象,它们反映了它们各自的表关系

public class User 
{
    public int Id {get; set;} //Primary Key
    public string Name {get; set;}

    public virtual ICollection<OOOSchedule> Schedules {get; set;}
}

public class OOOSchedule
{
    public int Id {get; set;} //Primary Key
    public int UserId {get; set;} //Foreign key reference from User table above (column Id)
    public int AlternateUserId {get; set;} //Another foreign key reference from User table above (column Id)
    public DateTime StartDate {get; set;}
    public DateTime EndDate {get; set;}

    public virtual User User {get; set;}
    public virtual User AlternateUser {get; set;}
} 

问题是我能够为用户获取 OOO 计划(集合),并且相应的用户数据也填充在 OOO 计划对象中。但是,我可能无法在 OOO 计划对象中获取 AlternateUser 数据。

我已经使用 Fluent API 尝试过这样的操作(尝试了多种变体):

modelBuilder.Entity<OOOSchedule>()
   .HasOne(s => s.User)
   .WithMany(o => o.Schedules);

modelBuilder.Entity<OOOSchedule>()
   .HasOne(s => s.AlternateUser)
   .WithMany(o => o.Schedules);
 
modelBuilder.Entity<User>()
   .HasMany(o => o.Schedules)
   .WithOne(u => u.User);

我确定问题是由于 DbContext 中的关系不正确,但由于我对 EF 的了解非常基础,我无法正确理解。

有人可以帮我解决这个问题吗?

0 个答案:

没有答案