2011-12-23 1 views
2

Я пытаюсь разработать структуру следующим образом ...многие ко многим репрезентации в EF Code First

  • Я представляю курсы, которые преподают учителя.
  • Для каждого из этих курсов есть любое количество экзаменов (потому что экзамен случайным образом сгенерирован, каждое поколение считается другим экзаменом), и я должен отслеживать это в базе данных.
  • Экзамен может быть сделан 0 или более учениками. (И, наоборот, Студент мог принять один или несколько Экзаменов.)
  • После того, как Студент сдаст экзамен (который делается через веб-интерфейс, который я уже разработал), этот Студент получает оценку для Экзамена и ExamStatus (Passed, Failed, Retake, 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; } 
} 

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

+0

Есть что-то, что я бы добавил к этой модели, если она притворяется реалистичной. Прежде всего - правильные ответы (даже если вопросы не являются испытаниями и списком всех ответов в противном случае). Во-вторых - в ExamResult я бы добавил списки вопросов (случайное подмножество вопросов) и ответы, которые дал конкретный ученик. Возможно, было бы полезно иметь шкалу баллов. Итак, какая система вы разрабатываете? – Shymep

ответ

2

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

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; } 
} 
+0

Ну, это то же самое, результат экзамена был выведен из экзамена, но вы дали пример кода, поэтому его хорошо оставить. –

2

Экзамен отдельно к экзамену.

Следовательно, вытащите баллы и статус на отдельный стол. Поле статуса может также хотеть включить взятый или ожидающий, так что вы знаете, что он его принял, но он ожидает отметки (то есть, если все это не делается автоматически)

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

+0

Сообщите мне, если вы хотите, чтобы я подробно остановился на этом. –