Entity framework EF自引用实体

Entity framework EF自引用实体,entity-framework,Entity Framework,为什么EF 6代码会生成意外的代码优先迁移结果? 我希望这段代码只生成一个ParentId,它是一个自引用FK。 这是基于末尾所附的基于EF 4.1的文章。EF 6中是否有任何变化会影响这种情况下的行为 实体: public class Category { public int CategoryId { get; set; } public string Name { get; set; } public int? ParentId { get; set; } public v

为什么EF 6代码会生成意外的代码优先迁移结果? 我希望这段代码只生成一个ParentId,它是一个自引用FK。 这是基于末尾所附的基于EF 4.1的文章。EF 6中是否有任何变化会影响这种情况下的行为

实体:

public class Category
{
  public int CategoryId { get; set; }
  public string Name { get; set; }
  public int? ParentId { get; set; }
  public virtual Category Parent { get; set; }
  public virtual ICollection<Category> Children { get; set; }
}

public class CategoryMap : EntityTypeConfiguration<Category> {
public CategoryMap() {
    HasKey(x => x.CategoryId);

    Property(x => x.CategoryId)
        .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

    Property(x => x.Name)
        .IsRequired()
        .HasMaxLength(255);

    HasOptional(x => x.Parent)
        .WithMany(x => x.Children)
        .HasForeignKey(x => x.ParentId)
        .WillCascadeOnDelete(false);
 }
}
代码优先迁移预期:


您可以将此作为进一步详细信息的参考:

迁移尝试时生成的错误是什么?没有错误。我只是不明白为什么结果与我预期的不同。如果使用HasMany.WithOptional.HasForeignKey,结果是否相同?
        CreateTable(
            "dbo.Categories",
            c => new
                {
                    CategoryId = c.Int(nullable: false, identity: true),
                    Name = c.String(),
                    ParentId = c.Int(),
                    Parent_CategoryId = c.Int(),
                })
            .PrimaryKey(t => t.CategoryId)
            .ForeignKey("dbo.Categories", t => t.Parent_CategoryId)
            .Index(t => t.Parent_CategoryId);
        CreateTable(
            "dbo.Categories",
            c => new
                {
                    CategoryId = c.Int(nullable: false, identity: true),
                    Name = c.String(),
                    ParentId = c.Int()
                })
            .PrimaryKey(t => t.CategoryId)
            .ForeignKey("dbo.Categories", t => t.ParentId )
            .Index(t => t.ParentId );