这是非常基本的问题我肯定,但现在让我感到困惑:S
我有2个表,学生和课程有外键约束,许多学生到1个课程。
我在Students表中存储了一个CourseId_FK参考,所以当我创建一个学生时,我怎么能做这样的事情?
Students student = new Students();
student.Name = Bob;
student.Course.CourseName = "Geography";
db.SaveChanges();
目前,上述方法无效,我必须解决
student.CourseId = 22;
任何人都可以帮我吗?
由于
大卫
答案 0 :(得分:5)
查看您的实体,“学生”是否有“课程”(真的:课程)属性?
你的实体应该看起来像这样,你想做什么:
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"));
您的代码发生了什么(我希望)是您只有CourseId
,所以当您这样做时,您无法为学生分配实际的课程对象。
答案 1 :(得分:4)
如果您不想加载完整的课程实体:
Student student = new Student();
student.Name = Bob;
student.CourseId = db.Courses
.Where(c => c.CourseName == "Geography")
.Select(c => c.CourseId).First();
db.SaveChanges();
这只会从数据库中获取地理位置课程的Id
(如果没有,则会崩溃)。
答案 2 :(得分:2)
我会做这样的事情:
Student student = new Student();
student.Name = Bob;
student.Course = db.Courses.First(c => c.CourseName == "Geography");
db.SaveChanges();
更新:答案是关于学生零课程或一门课程的情况(如提供的代码所示)。