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

时间:2011-05-24 16:20:55

标签: 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();

目前,上述方法无效,我必须解决

student.CourseId = 22;

任何人都可以帮我吗?

由于

大卫

3 个答案:

答案 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();

更新:答案是关于学生零课程或一门课程的情况(如提供的代码所示)。