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

时间:2016-03-16 18:46:52

标签: c# entity-framework .net-core

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

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>时,我收到以下错误:

  

导航&#39; ReportedByUser&#39;在实体类型&#39; WebProject.Models.Issue&#39;   尚未添加到模型中,或忽略或目标entityType   忽略。

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

2 个答案:

答案 0 :(得分:2)

当您首先使用迁移进行代码时,最好显式声明外键属性。 此外,如果您坚持使用此属性的约定 ReferencePropertyName + Id ,则不必使用ForeignKeyAttribute修饰该类,因为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; }    
}

答案 1 :(得分:1)

我能够通过在我的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; }    
}