c# - 系统.Data.SqlClient.SqlException : 'Introducing FOREIGN KEY constraint

标签 c# entity-framework entity-framework-core

我使用 Entity Framework Core 和 Code First 方法,但在尝试启动应用程序时收到以下错误:

System.Data.SqlClient.SqlException: 'Introducing FOREIGN KEY constraint 'FK_Grades_Students_StudentId' on table 'Grades' 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 or index. See previous errors.'

我的实体:

public class Student
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string Password { get; set; }

    public string Email { get; set; }

    public Group Group { get; set; }

    public IEnumerable<Subject> Subjects { get; set; } = new List<Subject>();


}

public class Subject
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }

    public string Name { get; set; }

    public IEnumerable<Grade> Grades { get; set; } = new List<Grade>();

    [ForeignKey("StudentId")]

    public Student Student { get; set; }

    public Guid StudentId { get; set; }

}

public class Grade
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }

    public double Value { get; set; }

    public DateTime DateOfGettingGrade { get; set; }

    [ForeignKey("SubjectId")]

    public Subject Subject { get; set; }

    public Guid SubjectId { get; set; }

    [ForeignKey("StudentId")]

    public Student Student { get; set; }

    public Guid StudentId { get; set; }
}


modelBuilder.Entity("GradeBook.Core.Models.Grade", b =>
            {
                b.HasOne("GradeBook.Core.Models.Student", "Student")
                    .WithMany()
                    .HasForeignKey("StudentId")
                    .OnDelete(DeleteBehavior.Cascade);

                b.HasOne("GradeBook.Core.Models.Subject", "Subject")
                    .WithMany("Grades")
                    .HasForeignKey("SubjectId")
                    .OnDelete(DeleteBehavior.Cascade);
            });

最佳答案

您在 Grade 上有一个不必要的外键。 Grade 引用 SubjectSubject 引用 Student。因此,当 Subject 也引用 Student 时,从 Grade 引用 Student 会创建冗余路径。从 GradeSubject 中删除 Student

关于c# - 系统.Data.SqlClient.SqlException : 'Introducing FOREIGN KEY constraint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49036861/

相关文章:

c# - 获取日期最接近现在的项目

c# - 在 C# 中转发事件

c# - SSIS 转换组件 : Large Scale Data Storage

.net - 什么是datetime2?

c# - Entity Framework Core、DELETE CASCADE 和 [必需]

c# - 添加依赖注入(inject)后,Add-Migration 出现错误

c# - TransactionScope 中的 Membership.GetUser() 抛出 TransactionPromotionException

c# - 如何将数据播种到 List<String> 模型成员?

c# - 将 EF Core 列/字段指定为只读

c# - 如何将 Entity Framework 中的数据绑定(bind)到数据网格?