在SaveChanges()之前修改模型

时间:2012-02-24 12:03:39

标签: asp.net-mvc model entity-framework-4.1

这是我的问题的超简化版本,但它直截了当。

我有这个模型

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

现在,想象一下我想在控制器中的SaveChanges()之前将AnswerText修改为“blah blah”:

[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 :(得分:0)

您不能期望实体框架具有List属性并知道如何存储它。您需要创建一个Answer实体并改为使用它:

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

它会将问题及其答案存储为单独的表格。对单个问题的每个答案都会得到自己的一行。