【问题标题】:Entity Framework Core: Introducing FOREIGN KEY constraint on table may cause cycles or multiple cascade pathsEntity Framework Core:在表上引入 FOREIGN KEY 约束可能会导致循环或多个级联路径
【发布时间】:2021-08-24 17:12:28
【问题描述】:

我正在尝试更新我的数据库,但出现以下错误:

在表“StudentAnnouncements”上引入 FOREIGN KEY 约束“FK_StudentAnnouncements_Students_StudentId”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

当我尝试使用更新我的数据库时收到此错误 dotnet ef 数据库更新

我在 student 和 StudentAnnouncement 之间有一对多的关系。 部分学生实体如下:

public class Student
    {
       public int Id { get; set; }
       public virtual ICollection<StudentAnnouncement> StudentAnnouncements { get; set; }
    }

我的 StudentAnnouncement 实体的一部分如下:

public class StudentAnnouncement
    {
        public int Id { get; set; }
        public virtual Student Student { get; set; }
    }

在我的数据库上下文类中,我有以下代码:

 protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
         modelBuilder.Entity<StudentAnnouncement>()
                     .HasOne(x => x.Student)
                     .WithMany(y => y.StudentAnnouncements)
                     .OnDelete(DeleteBehavior.Cascade);
         
      }

我尝试使用 IsRequired 而不是 OnDelete Cascade,如下所示,我得到了同样的错误

modelBuilder.Entity<StudentAnnouncement>()
             .HasOne(x => x.Class)
             .WithMany(y => y.StudentAnnouncements)
             .IsRequired();

【问题讨论】:

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


    【解决方案1】:

    只需修复类。如果您使用 net5,则不需要任何 Fluent API

    public class Student
        {
           public int Id { get; set; }
    
           public virtual ICollection<StudentAnnouncement> StudentAnnouncements { get; set; }
        }
    
    
    public class StudentAnnouncement
        {
            public int Id { get; set; }
    
              public int StudentId { get; set; }
            public virtual Student Student { get; set; }
        }
    

    【讨论】:

    • 刚试了下,还是不行。另外,我正在使用影子外键属性
    • 这就是您遇到问题的原因。您必须将此模型迁移到新数据库。
    • 我已经使用 [dotnet ef migrate] 创建了一个迁移,然后我做了 [dotnet ef database update],这就是我收到错误的时候
    • 你想更新什么。以前怎么样?
    • 我已按照您的建议将 StudentId 外键属性添加到 StudentAnnouncements 实体,因此我随后创建了一个迁移,然后我运行 dotnet ef database update 以使此迁移生效
    猜你喜欢
    • 2021-10-06
    • 2017-06-04
    • 2011-05-08
    • 2013-10-22
    • 2020-12-20
    • 2021-05-30
    相关资源
    最近更新 更多