Требуемый рабочий процесс
Сначала я хочу получить определенный набор вопросов и ответов из огромного набора вопросов и ответов, хранящихся в SQL Server (таблицы tblQuestions и tblAnswers)
Выбранные вопросы и соответствующие ответы будут храниться в статической коллекции (либо List<Quiz>
, либо hashmap<key,value>
, где ключом будет Id викторины, а значением будут коллекции Qns и Ans
Для каждого запроса http я должен предоставить конкретный вопрос и его ответы на основе уникального идентификатора QuestionId.
Поскольку многие учащиеся сдают экзамен для одного и того жетогда мне не нужно извлекать один и тот же набор тестов из БД, но если какой-то другой ученик другого потока начинает его / ее тест, мне нужно получить его для него из БД и сохранить его в той же статической коллекции сервера
5. Набор тестов будет удален из статической коллекции, как только тест будет завершен или отключен администратором.
Так что в основном я хочу знать, какой будет подходящая структура базы данных.Я хочу остаться с одноэлементным шаблоном, а также хочу сделать его потокобезопасным через блокировки или любой другой механизм
Пример модели теста
class Quiz
{
int QuizId; //QuizId
string QuizTitle; // Example - C# Quiz
List<QuestionAns> qnsAns; // List of Questiona and answers related to this Quiz
}
class QuestionAns
{
int QuestionId; //unique QuestionId
string Question; // Question Text
List<Answers> answers; //answers to this question ( can be more than one)
}
class Answer
{
int AnswerId; //unique AnswerId
string Answer;//Answer Text
bool isRight;//Is this Answer right
}
Теперь я действительно хочу создать потокбезопасный список викторины, как List<Quiz>
Как это сделать, или есть какой-то другой подходящий механизм?Я не очень хорошо разбираюсь в структурах данных, специфичных для веб-приложений.
Одной из возможных альтернатив такой структуре данных может быть следующий
public sealed class Singleton
{
private static readonly Lazy<Singleton> lazy =
new Lazy<Singleton>(() => new Singleton());
public static Singleton Instance { get { return lazy.Value; } }
private Singleton()
{
}
}