繁体   English   中英

如何在ASP.NET中的实体框架中设置删除级联以供自参考外键

[英]How to set on delete cascade for self reference Foreign Key in Entity Framework in ASP.NET

我正在开发一个ASP.NET MVC项目。 我正在使用实体框架代码优先方法与数据库进行交互。 但我在为实体的自引用外键设置级联删除时遇到问题。 请在下面查看我的情况。

这是我的带有自引用外键的实体类

public class Category
    {
        public int Id { get; set; }
        [Required]
        [MaxLength(50)]
        public string Name { get; set; }
        [MaxLength(55)]
        public string MmName { get; set; }
        public int? ParentId { get; set; }

        [ForeignKey("ParentId")]
        public virtual Category ParentCategory { get; set; }
        public virtual ICollection<Category> Categories { get; set; }
    }

这是我的背景

public class StoreContext : DbContext
    {
        public StoreContext():base("DefaultConnection")
        {

        }

        public DbSet<Category> Categories { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Category>().HasOptional(x => x.ParentCategory).WithMany(c => c.Categories).WillCascadeOnDelete();
        }
    }

当我运行时,会引发多个级联路径错误

Introducing FOREIGN KEY constraint 'FK_dbo.Categories_dbo.Categories_ParentId' on table 'Categories' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint. See previous errors.

是否可以先在删除级联上设置实体框架代码中的自引用外键?

我也遇到了类似的问题,如果我没有记错的话,我发现EF不支持自引用进行cassade删除 ,因此我们需要通过代码进行处理。 我遵循的是

  • 从流利的api或生成的迁移中删除级联删除。
  • 将代码添加到全部自引用的delte / setnull中,然后删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM