问题描述
|
我敢肯定这是一个非常基本的问题,但是现在让我感到困惑:S
我有2个表,“学生和具有外键约束的课程”,“许多学生到1个课程”。
我在“学生”表中存储了CourseId_FK引用,因此在创建“学生”时,我将如何做这样的事情?
Students student = new Students();
student.Name = Bob;
student.Course.CourseName = \"Geography\";
db.SaveChanges();
目前,以上操作无效,我必须解决
student.CourseId = 22;
有人可以帮我吗?
谢谢
大卫
解决方法
如果您不想加载整个课程实体:
Student student = new Student();
student.Name = Bob;
student.CourseId = db.Courses
.Where(c => c.CourseName == \"Geography\")
.Select(c => c.CourseId).First();
db.SaveChanges();
这只会从数据库中获取地理课程的“ 3”分(如果没有,则会崩溃)。
,查看您的实体,“学生”是否具有“课程”(实际上是课程)属性?
您想要做的事情,您的实体可能看起来应该像这样:
public class Student
{
public string Name {get; set;}
public virtual ICollection<Course> Courses {get; set;}
}
然后,您将执行以下操作:
Student student = new Student();
student.Name = Bob;
student.Courses.Add(db.Courses.Where(c => c.CourseName == \"Geography\"));
编辑:如果学生只能学习一门课程,则可以修改Student
类,使其看起来像这样:
public class Student
{
public int StudentId {get; set;}
public string Name {get; set;}
public int CourseId {get; set;}
public virtual Course Course {get; set;}
}
然后您的代码如下所示:
student.Course = db.Courses.Where(c => c.CourseName == \"Geography\"));
代码的作用(我希望如此)是您只有9英镑,因此当您这样做时,就无法为学生分配实际的课程对象。
,我会做这样的事情:
Student student = new Student();
student.Name = Bob;
student.Course = db.Courses.First(c => c.CourseName == \"Geography\");
db.SaveChanges();
更新:答案是关于学生上零门或一门课程的情况(如提供的代码所示)。