EF.core引用同一个表的一对多

时间:2017-08-02 16:19:06

标签: entity-framework

EF.core初学者在这里。 在我的应用程序中,我有人。这些连接到其他人(在同一个表中),并且这些连接具有“级别”。我添加了一个名为connection to join的连接表,它连接到谁以及在什么级别上。尝试执行添加迁移时,我收到以下错误:

  

无法确定“Person”类型的导航属性“Connection.Person”所代表的关系。手动配置关系,或从模型中忽略此属性。

我的其他连接表引用两个不同的表没有问题。我在这里缺少什么?

我正在使用EF.core 1.1,.net 4.5,代码

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string NickName { get; set; }                        
    public List<Connection> Connections { get; set; }
}

public class Connection
{
    public int PersonId { get; set; } 
    public Person Person { get; set; }
    public int SecondPersonId { get; set; }
    public Person SecondPerson { get; set; }
    public int ConnectionLevelId { get; set; } // connection Level
    public ConnectionLevel Level { get; set; }
}

public class ConnectionLevel
{
    public int Id { get; set; }
    public string Name { get; set; }
    //rights
}

public class testContext : DbContext
{
    public DbSet<Person> Persons { get; set; }
    public DbSet<Connection> Connections { get; set; }
    public DbSet<ConnectionLevel> ConnectionLevels { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("Server=localhost\\SQLEXPRESS;Database=master;Trusted_Connection=True;");
        base.OnConfiguring(optionsBuilder);
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Connection>().HasKey(s => new { s.PersonId, s.SecondPersonId });
        base.OnModelCreating(modelBuilder);
    }
}

1 个答案:

答案 0 :(得分:0)

我认为你必须在指定外键的类之间映射关系,如下所示:

modelBuilder.Entity<Connection>().HasOne(t => t.Person)
            .WithMany(t => t.Connections)
            .HasForeignKey(d => d.PersonId);

modelBuilder.Entity<Connection>().HasOne(t => t.SecondPerson)
            .WithMany(t => t.Connections)
            .HasForeignKey(d => d.SecondPersonId);

我希望这会有所帮助。