实体框架4,插入具有外键值而不是ID

问题描述

| 我敢肯定这是一个非常基本的问题,但是现在让我感到困惑: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();
更新:答案是关于学生上零门或一门课程的情况(如提供的代码所示)。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...