public class Admission
{
[Required]
public int AdmissionId { get; set; }
[Required]
public int SscInformationId { get; set; }
[Required]
public int HscInformationId { get; set; }
public SscInformation SscInformation { get; set; }
public HscInformation HscInformation { get; set; }
}
public class HscInformation
{
[Required]
public int HscInformationId { get; set; }
[Required]
public int EducationBoardId { get; set; }
[Required]
public int RollNumber { get; set; }
[Required]
public int PassingYear { get; set; }
public EducationBoard EducationBoard { get; set; }
}
public class SscInformation
{
[Required]
public int SscInformationId { get; set; }
[Required]
public int EducationBoardId { get; set; }
[Required]
public int RollNumber { get; set; }
[Required]
public int PassingYear { get; set; }
public EducationBoard EducationBoard { get; set; }
}
public class EducationBoard
{
[Required]
public int EducationBoardId { get; set; }
[Required(ErrorMessage = "Education Board Name is required.")]
[Display(Name = "Education Board Name")]
public string EducationBoardName { get; set; }
}
这是我的数据模型。当我尝试使用实体框架中的代码第一种方法创建数据库时,它给出了以下错误:
在表'SscInformations'上引入FOREIGN KEY约束'FK_dbo.SscInformations_dbo.EducationBoards_EducationBoardId'可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。 无法创建约束或索引。查看以前的错误。
我该如何解决这个问题?
答案 0 :(得分:1)
SscInformation
和SscInformation
都必须EducationBoard
(因为EducationBoardId
是必需的)。这意味着默认情况下这些关联已启用级联删除。
假设您有一个由EducationBoard
和 SscInformation
引用的SscInformation
。如果删除此EducationBoard
,则级联删除也会删除这些引用对象。这是一个多级联路径。
不允许多个(或循环)级联路径的Sql Server限制,因此当EF尝试构建数据库时会发生SqlException
。
您必须至少制作一个非级联的关联,例如
modelBuilder.Entity<SscInformation>()
.HasRequired(s => s.EducationBoard).WithRequiredDependent()
.WillCascadeOnDelete(false);
(在上下文的OnModelCreating
覆盖中。)