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);
}
}
答案 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);
我希望这会有所帮助。