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