【问题标题】:How to set on delete cascade for self reference Foreign Key in Entity Framework in ASP.NET如何在 ASP.NET 的实体框架中设置删除级联以进行自引用外键
【发布时间】:2016-10-22 12:25:35
【问题描述】:

我正在开发一个 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.

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

【问题讨论】:

    标签: asp.net entity-framework ef-code-first foreign-keys entity-framework-migrations


    【解决方案1】:

    我也遇到了类似的问题,如果我没记错的话我发现EF不支持自我引用的cassade delete,所以我们需要通过代码来处理它。我关注的是

    • 从 fluent api 或生成的迁移中删除级联删除。
    • 将代码添加到 delte/setnull 所有自引用然后删除。

    【讨论】:

    • 所以你的意思是完全不能为自引用FK设置级联删除?
    • 问题不是EF而是SQL Server,不支持这个。
    • @WaiYanHein:到目前为止,我还没有发现任何东西,但在许多帖子中发现 SQL 不支持它,正如 Florian 也指出的那样
    • 谢谢。我只是现在不需要设置它。
    猜你喜欢
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    相关资源
    最近更新 更多