实体框架4,使用外键值插入而不是ID

Dev*_*vid 5 c# entity-framework foreign-key-relationship

这是非常基本的问题,我确信,但现在让我感到困惑:S

我有2个表,学生和课程有外键约束,许多学生到1个课程.

我在Students表中存储了一个CourseId_FK参考,所以当我创建一个学生时,我怎么能做这样的事情?

Students student = new Students();
student.Name = Bob;
student.Course.CourseName = "Geography";
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

现在,以上不起作用,我必须解决

student.CourseId = 22;
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我吗?

谢谢

大卫

All*_*enG 5

看看你的实体,"学生"是否有"课程"(Really:Courses)属性?

对于您想要做的事情,您的实体应该看起来像这样:

public class Student
{
    public string Name {get; set;}

    public virtual ICollection<Course> Courses {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

然后你会做类似的事情:

Student student = new Student();
student.Name = Bob;
student.Courses.Add(db.Courses.Where(c => c.CourseName == "Geography"));
Run Code Online (Sandbox Code Playgroud)

编辑: 如果学生只能有一门课程,则修改课程,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;}
}
Run Code Online (Sandbox Code Playgroud)

然后你的代码看起来像这样:

student.Course = db.Courses.Where(c => c.CourseName == "Geography"));
Run Code Online (Sandbox Code Playgroud)

你的代码发生了什么(我希望)是你只有CourseId这样,所以你不能为你的学生分配一个实际的课程对象.


Sla*_*uma 5

如果您不想加载整个课程实体:

Student student = new Student();
student.Name = Bob;
student.CourseId = db.Courses
                     .Where(c => c.CourseName == "Geography")
                     .Select(c => c.CourseId).First();
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

这只会Id从数据库中获取地理课程的内容(如果没有,则会崩溃)。