Entity framework 实体框架asp.net MVC外键

Entity framework 实体框架asp.net MVC外键,entity-framework,ef-code-first,cascade,Entity Framework,Ef Code First,Cascade,我正在尝试先用代码编写以下代码。。。因为我才刚刚开始,所以我不能。。请帮忙。。提前感谢 1.学生:学生将有学生ID、名字和姓氏 学生应属于一个班级和一个部门(基本上与每个实体一对一的关系) 2.类:类将具有ClassId,名称 班级应该有学生集合和部分集合(基本上是与每个实体的多对多关系) 3.节:节将具有节ID、名称 部分应属于一个班级,并应收集学生(基本上与班级一对一关系,与学生一对多关系) 下面是相同的代码 学生会 public class Students { publi

我正在尝试先用代码编写以下代码。。。因为我才刚刚开始,所以我不能。。请帮忙。。提前感谢
1.学生:学生将有学生ID、名字和姓氏
学生应属于一个班级和一个部门(基本上与每个实体一对一的关系)
2.类:类将具有ClassId,名称
班级应该有学生集合和部分集合(基本上是与每个实体的多对多关系)
3.节:节将具有节ID、名称
部分应属于一个班级,并应收集学生(基本上与班级一对一关系,与学生一对多关系)
下面是相同的代码

学生会

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; }  
}  
公共类
{  
public int ClassesId{get;set;}
公共字符串名称{get;set;}
公共ICollection节{get;set;}
}  
第3.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; }
}
公共类部分
{
公共int节sid{get;set;}
公共字符串名称{get;set;}
public int ClassesId{get;set;}
公共类{get;set;}
公共ICollection学生{get;set;}
}
如果我这样做,我会得到错误信息:

引入外键约束 表“Sections”上的“FK_dbo.Sections_dbo.Classes_ClassesId”可能导致 循环或多个级联路径。指定ON DELETE NO ACTION或ON 不更新任何操作,或修改其他外键约束


我知道我可以使用fluent API消除这个错误,并告知不要在删除时级联,但我不想这样做。还有其他解决办法吗??请对当前模型提供帮助,否,除了禁用某些关系的casdading delete之外,没有其他方法

您的所有关系都是必需的,这意味着如果某个类被删除,您将删除该类的部分和该类的学生(
由于
学生
中所需的导航属性
)。但是如果删除了这些部分,那么这些部分的学生也会被删除——这是
学生
的第二条删除路径

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

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

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

这将修复
学生
类中多个级联删除路径的问题,因为默认情况下,可选关系没有启用级联删除。
部分
之间的关系仍然是必需的,因此删除一个类也会删除属于该类的所有部分,但它不会再删除学生。

实际上,这个想法是创建一个学校结构。。。在学校里有不同的班级。。。例如,每门课都有不同的部分。第一标准节A、第一标准节B、第二标准节A、第二标准节B、,第二标准C部分等。这里的学生实际上属于一个部分,部分属于一个班级,但最终学生也属于班级,班级必须在学生代码中被引用多次,所以我觉得这是一种关系。请帮助,如果有任何其他类型的方式来定义这种关系。只是想添加到。。。这里的班级规模很大,所以他们被分为几个部分……例如,如果第一标准中有80名学生,那么第一标准中的A和B两个部分各有40名学生……如果学生在学校注册,则必须属于一个班级,如果班级有部分,则应属于班级内的一个部分……如果节被删除,然后学生应该移动到课堂中的默认节。。。比如说A节。。如果你能帮我解决这个问题的模型逻辑,那就太好了。。。谢谢你的回答。:)@阿米特拉亚:在我看来,你的模特其实很好。您只需为
学生
之间以及
学生
部分
之间的关系禁用级联删除。这不仅在技术上是必要的,而且从商业角度来看,级联删除对我来说是错误的:当一个类被删除时,学生不应该被删除,他们应该被分配到另一个类。