实体框架 4,插入时外键值而不是 ID
本文关键字:键值 ID 框架 插入 实体 | 更新日期: 2023-09-27 17:57:38
我
敢肯定这是非常基本的问题,但现在让我感到困惑: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();
这只会从数据库中获取地理课程的Id
(或者在没有任何地理课程时崩溃(。
查看您的实体,"学生"是否有"课程"(实际上:课程(属性?
对于您想要执行的操作,您的实体可能应该看起来像这样:
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
所以当你这样做时,你不能将实际的课程对象分配给你的学生。
我会做这样的事情:
Student student = new Student();
student.Name = Bob;
student.Course = db.Courses.First(c => c.CourseName == "Geography");
db.SaveChanges();
更新:答案是关于学生有零门或一门课程的情况(如提供的代码所示(。