【问题标题】:Entity Framework Itself referention -> parent/child [duplicate]实体框架本身的引用->父/子[重复]
【发布时间】:2017-09-06 19:09:39
【问题描述】:

是否可以使用 EF Core 和 fluent api 设置父/子关系?

我有以下课程

public class Category 
{
   public int Id { get; set; }
   public int ParentId { get; set; }
   public string Name { get; set; }
   public ICollection<Category> SubCategories { get; set; }
}

因此,如果我创建具有如下结构的对象列表,EF 可能会设置实体的 id 和 parentId 具有适当的数字?

  • 1 类
    • 2 类
      • 3 类
    • 四类
    • Cat5

【问题讨论】:

    标签: c# asp.net entity-framework asp.net-core


    【解决方案1】:

    你可以只引用你自己的类:

    public class Category 
    {
       public int Id { get; set; }
       public int? ParentId { get; set; }
       public Category Parent { get; set; }
       public string Name { get; set; }
       public ICollection<Category> SubCategories { get; set; }
    }
    

    你也可以使用fluent api进一步设置:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
      modelBuilder.Entity<Category>()
                .HasMany(j => j.SubCategories)
                .WithOne(j => j.Parent)
                .HasForeignKey(j => j.ParentId)
    }
    

    【讨论】:

    • 不幸的是,在 EF Core 中没有 HasOptional 选项。
    • 我将语法更改为 EF 7。可为空的 parentId 应将其设置为可选
    • 但这不起作用。如果我尝试更新数据库,我有一个例外:在表 'Categories' 上引入 FOREIGN KEY 约束 'FK_Categories_Categories_ParentId' 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。无法创建约束或索引。查看以前的错误。
    • 你试过了吗.WillCascadeOnDelete(false); ?
    • 子类别应该有虚拟关键字吗?
    猜你喜欢
    • 1970-01-01
    • 2019-04-13
    • 2012-04-14
    • 2011-12-06
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多