Entity Framework 4, вставка со значением внешнего ключа, а не ID - PullRequest
4 голосов
/ 24 мая 2011

Я уверен, что это довольно простой вопрос, но сейчас он меня озадачивает: S

У меня есть 2 таблицы, студенты и курсы с ограничением по внешнему ключу, многие студенты на 1 курс.

Я храню в своей таблице учеников ссылку на CourseId_FK, поэтому, когда я создаю ученика, как я смогу сделать что-то подобное?

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

Прямо сейчас, вышеупомянутое не работает, и я должен решить к

student.CourseId = 22;

Может кто-нибудь помочь мне, пожалуйста?

Спасибо

David

Ответы [ 3 ]

5 голосов
/ 24 мая 2011

Рассматривая ваши сущности, есть ли у "Студента" свойство "Курс" (Действительно: курсы)?

Вероятно, ваша сущность должна выглядеть примерно так, что вы хотите сделать:

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, когда вы 'поэтому вы не можете назначить фактический объект курса вашему ученику.

4 голосов
/ 24 мая 2011

Если вы не хотите загружать полную сущность курса:

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 голосов
/ 24 мая 2011

Я бы сделал что-то вроде этого:

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

Обновление: ответ о ситуации, когда у ученика нулевой или один курс (как в предоставленном коде).

...