在 EF7 中添加多个相同类型的导航属性

Adding multiple navigation properties of the same type in EF7

我有一个看起来像这样的模型

public class Issue
{
    public Guid Id { get; set; }

    [Required]
    public User ReportedByUser { get; set; }

    public User ClosedByUser { get; set; }

    public Category Category { get; set; }
}

但是,当我 运行 ef migrations add <MigrationName> 我收到以下错误:

The navigation 'ReportedByUser' on entity type 'WebProject.Models.Issue' has not been added to the model, or ignored, or target entityType ignored.

当我在模型中只有 1 个 User 类型的导航 属性 时,我没有收到此错误。我如何使用上面的模型进行这项工作?

当您首先使用迁移进行编码时,最好显式声明外键属性。 此外,如果您遵守此 属性 的约定 ReferencePropertyName + Id,则不必使用 ForeignKeyAttribute 修饰 class,因为 EF 会为您解析它。

public class Issue
{
        public Guid Id { get; set; }   

        public Guid ReportedByUserId { get; set; }
        public User ReportedByUser { get; set; }

        public Guid ClosedByUserId { get; set; }
        public User ClosedByUser { get; set; }    
}

我能够通过在我的 DbContext 中设置以下关系来解决这个问题。

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Issue>()
            .HasOne(i => i.ReportedByUser)
            .WithMany(u => u.Issues)
            .OnDelete(DeleteBehavior.Restrict);

        modelBuilder.Entity<Issue>()
                .HasOne(i => i.ClosedByUser)
                .WithMany(u => u.Issues)
                .OnDelete(DeleteBehavior.Restrict).IsRequired(false);

        base.OnModelCreating(modelBuilder);
    }

并像下面这样设置模型。

public class Issue
{
    public Guid Id { get; set; }   
    [Required]        
    public User ReportedByUser { get; set; }        
    public User ClosedByUser { get; set; }    
}