Изменение модели непосредственно перед SaveChanges () - PullRequest
0 голосов
/ 24 февраля 2012

Это ультра-упрощенная версия моей проблемы, но она подходит прямо к делу.

У меня есть эта модель

public int QuestionId { get; set; }
public string QuestionText { get; set; }
public string AnswerText { get; set; }

Теперь представьте, что я хочу изменить AnswerText на "бла-бла", прямо перед SaveChanges () в контроллере:

[HttpPost]
public ActionResult Create(Question question)
{
    if (ModelState.IsValid)
    {
        question.AnswerText = "blah blah"

        db.Questions.Add(question);                
        db.SaveChanges();
        return RedirectToAction("Index");  
    }

    return View(question);
}

Это работает как ожидалось .

Теперь вместо публичная строка AnswerText {get; задавать; } Я хочу получить список ответов:

public List<string> AnswersText { get; set; }

И я хочу вручную добавить ответы непосредственно перед SaveChanges ():

[HttpPost]
public ActionResult Create(Question question)
{
    if (ModelState.IsValid)
    {
        question.AnswersText = new List<string>();
        question.AnswersText.Add("blah1");
        question.AnswersText.Add("blah2");
        question.AnswersText.Add("blah3");

        db.Questions.Add(question);                
        db.SaveChanges();
        return RedirectToAction("Index");  
    }

    return View(question);
}

То, что я получаю, странно: мой вопрос правильно добавлен в контекст, но список ответов всегда пуст. Я не знаю, что делать, мне кажется, что такая простая задача.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 24 февраля 2012

Вы не можете ожидать, что структура сущностей будет иметь свойство List и знать, как его хранить. Вам необходимо создать объект ответа и использовать его вместо:

public class Answer
{
    public int AnswerId { get; set; }
    public int QuestionId { get; set; }
    public string AnswerText { get; set; }

    public virtual Question Question { get; set; }
}

сейчас в вопросе:

public class Question 
{
    public int QuestionId { get; set; }
    public string QuestionText { get; set; }
    public virtual ICollection<Answer> Answers { get; set; }
}

Он будет хранить вопросы и ответы на них в отдельной таблице. Каждый ответ на один вопрос будет иметь свою собственную строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...