2011-05-24 59 views
4

插入這是很基本的問題,我知道,但它現在莫名其妙我:S實體框架4,與國外鍵值不是ID

我有2個表,學生和課程與外鍵約束,許多學生1課程。

我在我的學生表中存儲了一個CourseId_FK參考,所以當我創建一個學生時,我該如何做到這樣?

Students student = new Students(); 
student.Name = Bob; 
student.Course.CourseName = "Geography"; 
db.SaveChanges(); 

眼下,上述不工作,我有決心

student.CourseId = 22; 

誰能幫我請?

感謝

大衛

+0

我有點困惑,因爲學生=>課程是一對多,所以應該是學生。課程? – Vimvq1987 2011-05-24 16:29:43

+0

@ Vimvq1987是的,我很抱歉,我在寫我的文章時犯了一個錯誤,我已經糾正了它,很多學生都修了1門課。 – DeveloperDavid 2011-05-24 16:42:45

回答

4

如果你不希望加載的全部課程實體:

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

這隻會獲取從DB地理課程的Id(或崩潰時沒有任何)。

+0

謝謝,這正是我所期待的。其他答案也讓我感到開心。謝謝你們 – DeveloperDavid 2011-05-24 16:49:49

2

我會做這樣的事情:

Student student = new Student(); 
student.Name = Bob; 
student.Course = db.Courses.First(c => c.CourseName == "Geography"); 
db.SaveChanges(); 

更新:答案是什麼時候一個學生都有零或一門課程的情況(如提供碼)。

+0

'課程'從哪裏來? – DeveloperDavid 2011-05-24 16:41:01

+0

@ davidt07,它是db.Courses(答案更新) – bniwredyc 2011-05-24 17:13:23

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所以當你這樣你就可以實際的課程對象不分配給您的學生。

+0

如果一個學生有很多課程,那就是正確的答案。 – bniwredyc 2011-05-24 16:35:14

+0

是的,我很抱歉,一個學生只有一門課程,我在寫原始問題時犯了一個錯誤。 – DeveloperDavid 2011-05-24 16:40:17

+0

謝謝,這個開啓了我的眼睛讓我更加了解Entity Framework,謝謝 – DeveloperDavid 2011-05-24 16:50:58