Понимание времени существования контекста сущности

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

Прежде всего это раздел кода, в котором появляется ошибка:

контроллер:

public ActionResult IndexPost(IEnumerable<QuestionView> questions, string button)
        {
            foreach (QuestionView question in questions)
            {
                UserAnswerRepository useransrepo = new UserAnswerRepository();
                MiscDBRepository miscrepo = new MiscDBRepository();

                //Store user's answer
                useransrepo.CreateUserAnswer(<>);

                //Check answer against rubrics
                choiceList = miscrepo.GetChoicesAnswithQuesId(question.QuestionId);
                ....
           }
       }

Репозиторий БД:

public class UserAnswerRepository
    {
        //Add user answer to DB
        public void CreateUserAnswer(string sessionId, string email, int questionId, string answer)
        {
            using (SWSSEntities db = new SWSSEntities())
            {
                user_answers useranstable = new user_answers();

                AuthCodeRepository authrepo = new AuthCodeRepository();
                UserRepository userrepo = new UserRepository();
                QuestionRepository quesrepo = new QuestionRepository();

                if (sessionId == "0")
                    useranstable.authcode = authrepo.GetRecordwithEmail(email);
                else
                    //useranstable.user = userrepo.GetUser(userrepo.GetUserNameByEmail(email));
                    useranstable.question = quesrepo.GetQuestionRecordwithId(questionId);
                useranstable.answer = answer;

                db.AddTouser_answers(useranstable);
                db.SaveChanges();
            }
        }
    }

а также

public class MiscDBRepository
    {
        //Get choices and answers for a question with questionid
        public List<string> GetChoicesAnswithQuesId(int id)
        {
            using (SWSSEntities _db = new SWSSEntities())
            {
                var list = new List<string>();
                list.Add((from d in _db.question_choices where d.question.id == id select d.choice1).First());
                list.Add((from d in _db.question_choices where d.question.id == id select d.choice2).First());
                list.Add((from d in _db.question_choices where d.question.id == id select d.choice3).First());
                list.Add((from d in _db.question_choices where d.question.id == id select d.choice4).First());
                list.Add((from d in _db.question_choices where d.question.id == id select d.answer).First());
                return list;
            }
        }
    }

Вопрос 1:

Я получаю следующую ошибку: "Свойство EntityKey можно установить, только если текущее значение свойства равно нулю". В контроллере я использую создание объекта внутри цикла for, поэтому объект должен создаваться заново для каждого цикла. Однако почему я получаю ошибку, что свойство EntityKey уже установлено в следующих строках: public void AddTouser_answers(user_answers user_answers) { base.AddObject("user_answers", user_answers); } Разве объект не создается заново для каждого цикла? Это из-за этого утверждения: "using (SWSSEntities _db = new SWSSEntities())"

Вопрос 2:

В Stackru обсуждается известная ошибка: "на объект сущности нельзя ссылаться несколькими экземплярами ientitychangetracker". Мне любопытно, что эти две строки, UserAnswerRepository useransrepo = new UserAnswerRepository(); MiscDBRepository miscrepo = new MiscDBRepository(); не бросил эту ошибку. Это почему?

Вопрос 3:

Как мне решить эту проблему?

Мои эксперименты:

Я попытался удалить оператор "using (SWSSEntities _db = new SWSSEntities ())" из репозиториев и создал контекст сущности в каждом из них. Затем вышла ошибка в вопросе 2. Итак, "using (SWSSEntities _db = new SWSSEntities())" правильно связывает и развязывает мою сущность (исправьте меня, если я ошибаюсь) между экземплярами двух репозиториев. Если я прав, почему бы не сделать то же самое для ошибки в "Вопросе 1" (последовательное создание одного и того же хранилища).

Это потому, что UserAnswerRepository сохраняет в БД, а другой только читает?

Я сбит с толку. Я довольно новичок в.NET C# и всей этой вещи Entity Framework. Так что прошу прощения, если я был глупым.

Схема БД:

0 ответов

Другие вопросы по тегам