Представление отношений многие ко многим в EF Code First - PullRequest
2 голосов
/ 23 декабря 2011

Я пытаюсь разработать структуру следующим образом ...

  • Я представляю курсы, которые преподаются учителями.
  • Для каждого из этих курсов есть какие-либоколичество экзаменов (поскольку экзамен генерируется случайным образом, каждое поколение считается отдельным экзаменом), и я должен отслеживать это в базе данных.
  • Экзамен может сдать 0 или более студентов.(И, наоборот, Студент может сдать один или несколько экзаменов.)
  • После того, как Студент сдает экзамен (который выполняется через веб-интерфейс, который я уже разработал), этот Студент получает оценку заЭкзамен и ExamStatus (Пройдено, Сбой, Возврат, TestOut и т.Учитель) и т. д., но у меня есть хорошее понимание этого.

Я почти закончил свою структуру, но я борюсь с тем, как представить отношение студентов к экзаменам, а также работаю на ExamStatus,Вот моя мысль до сих пор.(Уже поздно, поэтому я приношу свои извинения за глупые ошибки.)

public class Student
{
    public string StudentID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    // Should this even be part of the Student POCO?
    public virtual ICollection<Exam> ExamsTaken { get; set; }
}

// I know this is right - putting it here to provide all the classes in question.
public class ExamStatus
{
    public int ExamStatusID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

// This is the POCO that really hangs me up.
public class Exam
{
    public int ExamID { get; set; }
    public int CourseID { get; set; }
    public string ExamTitle { get; set; }

    // Not sure if this should be part of Exam, or part of a different
    // object?
    public decimal? Score { get; set; }
    public int? ExamStatusID { get; set; }

    public virtual ICollection<Question> Questions { get; set; }
    public virtual Course Course { get; set; }
    public virtual ExamStatus ExamStatus { get; set; }
}

Буду признателен за любую помощь в этом отношении многие ко многим (студенты <-> экзамены).Я думаю, что слишком много думал об этом и полностью запутался в чем-то, что, вероятно, довольно просто.

Ответы [ 2 ]

2 голосов
/ 23 декабря 2011

Это то, что я бы изменил.Я не думаю, что именно то, что сказал Адам.Если это, дайте мне знать, и я удалю сообщение

public class Student
{
    public string StudentID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    // changed this to results of the exams taken
    // you can still get exam via ExamResult -> Exam
    public virtual ICollection<ExamResult> ExamsTaken { get; set; }
}

public class Exam
{
    public int ExamID { get; set; }
    public int CourseID { get; set; }
    public string ExamTitle { get; set; }

    public virtual ICollection<Question> Questions { get; set; }
    public virtual Course Course { get; set; }
    // used to be ICollection of exam statuses, but that got moved to the
    // ExamResult class
    public virtual ICollection<ExamResults> Results { get; set; }
}

public class ExamResult
{
    public int ExamID { get; set; }
    public int StudentID { get; set; }

    public decimal? Score { get; set; }
    // all your results should have a status right? im assuming
    // unfinished or not started exams have statuses
    // so this shouldn't be nullable
    public int ExamStatusID { get; set; }

    public virtual Student Student { get; set; }
    public virtual Exam Exam { get; set; }
}
2 голосов
/ 23 декабря 2011

Экзамен не зависит от результата экзамена.

Следовательно, выведите результаты и статус в отдельную таблицу. В поле состояния также может быть указано «занято» или «ожидают», чтобы вы знали, что они взяли его, но он ожидает отметки (то есть, если все не выполнено автоматически)

Таким образом, у студента есть список сданных экзаменов, который связан с таблицей баллов, а таблица баллов связана с тем, какой экзамен это был.

...