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节。。如果你能帮我解决这个问题的模型逻辑,那就太好了。。。谢谢你的回答。:)@阿米特拉亚:在我看来,你的模特其实很好。您只需为学生
和类
之间以及学生
和部分
之间的关系禁用级联删除。这不仅在技术上是必要的,而且从商业角度来看,级联删除对我来说是错误的:当一个类被删除时,学生不应该被删除,他们应该被分配到另一个类。