Entity Framework 5 Code Première relation auto-référencée

Comment aurais-je carte la relation suivante dans l'Entity Framework 5?

public class Item {
  public int Id { get; set; }
  public int? ParentItemId { get; set; }
  public string Value { get; set; }

  public Item ParentItem { get; set; }
  public List<Item> ChildItems { get; set; }
}

J'ai essayé ceci:

protected override void OnModelCreating(DbModelBuilder modelBuilder) {
  base.OnModelCreating(modelBuilder);

  modelBuilder.Entity<Item>()
              .HasOptional(i => i.ParentItem)
              .WithMany(i => i.ChildItems)
              .HasForeignKey(i => i.ParentItemId);
}

et ce:

protected override void OnModelCreating(DbModelBuilder modelBuilder) {
  base.OnModelCreating(modelBuilder);

  modelBuilder.Entity<Item>()
              .HasMany(i => i.ChildItems)
              .WithOptional(i => i.ParentItem)
              .HasForeignKey(i => i.ParentItemId);
}

qui la fois le résultat de cette erreur:

Les types de toutes les propriétés dans le Rôle Dépendants d'un référentiel de contrainte doit être le même que le type de propriété dans le Rôle Principal.

Si je commence avec la base de données de la première cartographie, voici ce que l'généré entité ressemble:

public partial class Item
{
    public Item()
    {
        this.ChildItems = new HashSet<Item>();
    }

    public int Id { get; set; }
    public Nullable<int> ParentItemId { get; set; }
    public string Value { get; set; }

    public virtual ICollection<Item> ChildItems { get; set; }
    public virtual Item ParentItem { get; set; }
}

Je sais que cela ne fonctionnera que si je commence avec db-tout d'abord, j'ai juste besoin de savoir comment définir la relation dans le code-première.

source d'informationauteur user326502