Coleção muitos para muitos da mesma entidade, com relacionamento bidirecional

Suponha que eu tenho uma entidade de widget e desejo rastrear outros widgets adjacentes a cada um. Se o primeiro widget for adjacente ao segundo, o inverso também será verdadeiro - o segundo será adjacente ao primeiro.

Idealmente, eu teria uma coleção única na entidade e poderia configurá-la fluentemente para esse tipo de relacionamento.

public class Widget
{
    // ...

    public virtual ICollection<Widget> Adjacent { get; set; }
}

No entanto, quando eu tento isso ...

modelBuilder.Entity<Widget>
            .HasMany(w => w.Adjacent)
            .WithMany(w => w.Adjacent);

... O Entity Framework não gosta nada disso.

A propriedade de navegação 'Adjacente' declarada no tipo 'Widget' não pode ser inversa.

Existe uma maneira de configurar a entidade que atinge esse objetivo, ou eu vou ficar preso criando propriedades de navegação de coleção pai / filho ou contêineres de relacionamento separados?

questionAnswers(1)

yourAnswerToTheQuestion