Ваше отображение неверно.Вы создаете самоссылающуюся сущность, поэтому вам нужен отдельный набор для входящих и исходящих отношений.Одной коллекции недостаточно.
public class Zone
{
public string Id { get; set; }
public string Name { get; set; }
[InverseProperty("NeighbourOf")]
public virtual ICollection<Zone> NeighbourTo { get; set; }
[InverseProperty("NeighbourTo")]
public virtual ICollection<Zone> NeighbourOf { get; set; }
}
Вам не нужно отображать соединительную таблицу, если вы также не хотите добавить некоторые дополнительные свойства в отношение.
Если вы хотите только одну коллекциюнеобходимо использовать свободное отображение:
public class Zone
{
public string Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Zone> Neighours { get; set; }
}
public class Context : DbContext
{
public DbSet<Zone> Zones { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Zone>()
.HasMany(z => z.Neighbours)
.WithMany();
}
}