这是我的问题的超简化版本,但它直截了当。
我有这个模型
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);
}
我得到的是奇怪的:我的问题被正确添加到上下文中,但答案列表始终为空。我不知道该怎么做,这对我来说似乎是一项简单的任务。
感谢您的帮助。
答案 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; }
}
它会将问题及其答案存储为单独的表格。对单个问题的每个答案都会得到自己的一行。