如何在ASP.NET中的实体框架中设置用于自引用外键的删除级联 [英] How to set on delete cascade for self reference Foreign Key in Entity Framework in ASP.NET

查看:278
本文介绍了如何在ASP.NET中的实体框架中设置用于自引用外键的删除级联的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am developing an ASP.NET MVC project. I am using Entity Framework code first approach to interact with database. But I am having a problem with setting on cascade delete for self-reference foreign key for an entity.

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

This is my entity class with self reference foreign key

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();
        }
    }

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

When I run, multiple cascade path errors throw

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.

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

Is it possible set on delete cascade for self-referencing foreign key in entity framework code first?

推荐答案

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

i also faced the similar issue, and if i remember correctly what i found is EF doesn't support cassade delete on self reference, so we need to handle it by code. What i followed is


  • 从流利的api或生成的迁移中删除级联删除。

  • 将代码添加到全部自引用的delte / setnull中,然后删除。

这篇关于如何在ASP.NET中的实体框架中设置用于自引用外键的删除级联的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆