Entity framework 实体框架中的双向关系(代码优先)

Entity framework 实体框架中的双向关系(代码优先),entity-framework,ef-code-first,Entity Framework,Ef Code First,我有一个关于代码优先EF的最佳实践的问题。 我有两个类User.cs和Team.cs: public class Team() { [Key] public int TeamId{get;set;} public string TeamName {get;set;} public virtual User TeamLead {get;set;} public virtual User Manager {get;set;} } public class User { public in

我有一个关于代码优先EF的最佳实践的问题。 我有两个类User.cs和Team.cs:

public class Team()
{
[Key]
public int TeamId{get;set;}
public string TeamName {get;set;}
public virtual User TeamLead {get;set;}
public virtual User Manager {get;set;}
}

  public class User
{
   public int UserId {get;set;}
   public string FullName {get;set;}
}
每个用户都有一个团队。一个团队需要一个团队领导和一个经理。如何在代码优先EF中创建双向关系?我读过一些例子,但我不知道最好的方法是什么


谢谢。

只为那些需要知道的人。下面是我如何解决它的

public class Team
{
    [Key]
    public int TeamId{get;set;}
    public string TeamName {get;set;}

    [ForeignKey("TeamLead")]
    public int TeamLeadId { get; set; }
    public virtual User TeamLead {get;set;}

    [ForeignKey("Manager")]
    public int ManagerId { get; set; }
    public virtual User Manager {get;set;}
}

public class User
{
    [Key]
    public int UserId {get;set;}
    public string FullName {get;set;}

    [ForeignKey("Team")]
    public int TeamId { get; set; }
    public virtual Team Team { get; set; }
}
我使用Fluent Api方法创建关系:

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<Team>()
           .HasMany(m => m.Users).WithRequired(m => m.Team);
    }

这就解决了问题

嗨,谢谢你的回复。我运行了该代码并得到以下错误:在表“Teams”上引入外键约束“FK_dbo.Teams_dbo.Users_TeamLeadId”可能会导致循环或多个级联路径。指定“在删除时不执行操作”或“在更新时不执行操作”,或修改其他外键约束。无法创建约束。请参阅前面的错误。您可以使用fluent API修复该错误:是否有其他方法不使用fluent API进行修复?
  [Key]
    public int TeamId { get; set; }

    public string TeamName { get; set; }

    public virtual User TeamLead { get; set; }

    public virtual User Manager { get; set; }

    public List<User> Users { get; set; }
 [Key]
    public int UserId { get; set; }

    [Display(Name = "User Name")]
    [Required(ErrorMessage = "User Name is required")]
    public string UserName { get; set; }

    [Display(Name = "Full Name")]
    public string FullName { get; set; }

    [Display(Name = "Email")]
    [Required(ErrorMessage = "Email is required")]
    public string Email { get; set; }

    public virtual Team Team { get; set; }