3

我正在尝试首先在代码中编写以下代码......因为我刚刚开始我无法......请帮助..提前谢谢
1.学生:学生将拥有学生证,名字,姓氏
学生应该属于到一个班级和一节(基本上与每个实体一对一的关系)
2. 班级:班级将有 ClassId,名称
班级应该有学生的集合和节的集合(基本上与每个实体的多对多关系)
3. 节:部分将有SectionID,名称
部分应该属于一个班级并且应该有学生的集合(基本上与班级的一对一关系和与学生的一对多关系)
下面是相同的代码

学生.cs

public class Students  
{  
    public int StudentsId { get; set; }  
    public string FirstName { get; set; }  
    public string LastName { get; set; }  
    public string UserName { get; set; }  
    public decimal Grade { get; set; }  
    public int ClassesId { get; set; }  
    public Classes Classes { get; set; }  
    public int SectionsId { get; set; }  
    public Sections Sections { get; set; }  
}  

类.cs

public class Classes  
{  
    public int ClassesId { get; set; }  
    public string Name { get; set; }  

    public ICollection<Sections> Sections { get; set; }  
}  

Sections.cs

public class Sections
{
    public int SectionsId { get; set; }
    public string Name { get; set; }
    public int ClassesId { get; set; }

    public Classes Classes { get; set; }
    public ICollection<Students> Students { get; set; }
}

如果我这样做,我会收到错误消息:

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

我知道我可以使用流畅的 API 并告诉不要在删除时级联来摆脱这个错误,但我不想这样做。有没有其他解决方案?请帮忙

4

1 回答 1

1

对于您当前的模型,不,除了对某些关系禁用级联删除之外别无他法。

您的所有关系都是必需的,这意味着如果删除了一个班级,您将删除该班级的部分和学生(由于 中所需的导航属性,Classes没有公开的学生集合)。但是,如果这些部分被删除,那么该部分的学生也会被删除 - 这是.ClassesStudentsStudents

我不知道您的模型的确切含义,但对我来说,如果班级被删除,删除班级的所有学生听起来很奇怪。学生总是必须上课还是不能暂时没有课堂作业(以及部分作业)?也许学生有半年的假期学期,不参加任何课程?

在这种情况下,您可以将关系Students设为可选。只需将外键属性声明为可为空:

public class Students  
{
    //...
    public int? ClassesId { get; set; }  
    public Classes Classes { get; set; }  
    public int? SectionsId { get; set; }  
    public Sections Sections { get; set; }  
}

这将解决您在Students类中的多个级联删除路径的问题,因为默认情况下可选关系没有启用级联删除。Classes和之间的关系Sections仍然是必需的,因此删除一个班级会同时删除属于该班级的所有部分,但不会再删除学生。

于 2012-09-13T13:16:35.630 回答