【发布时间】:2015-02-16 01:20:50
【问题描述】:
将 Question 和 PossibleAnswer 的关系从多对多更改为一对多后,我得到一个异常:“对数据库的更改已成功提交,但在更新对象上下文时发生错误。ObjectContext 可能处于不一致状态。内部异常消息:违反多重性约束。关系“WebUI.Models.PossibleAnswer_Question”的角色“PossibleAnswer_Question_Source”具有多重性 1 或 0..1。”什么意思?
这是我的模型:
public class Question
{
public int ID { get; set; }
public string Text { get; set; }
public bool IsAssociatedWithProfessor { get; set; }
public bool IsAssociatedWithAssistant { get; set; }
public virtual ICollection<PossibleAnswer> PossibleAnswers { get; set; }
public virtual ICollection<Results> Results { get; set; }
}
public class PossibleAnswer
{
public int ID { get; set; }
public string Text { get; set; }
public virtual Question Question { get; set; }
}
问题的视图模型(我知道 ToQuestion 应该在控制器中,我稍后会重新排列它):
public class QuestionVM
{
public QuestionVM() {
}
public QuestionVM(Question question) : this()
{
ID = question.ID;
Text = question.Text;
IsAssociatedWithProfessor = question.IsAssociatedWithProfessor;
IsAssociatedWithAssistant = question.IsAssociatedWithAssistant;
}
public int? ID { get; set; }
public string Text { get; set; }
public bool IsAssociatedWithProfessor { get; set; }
public bool IsAssociatedWithAssistant { get; set; }
private IEnumerable<string> _possibleAnswers;
public IEnumerable<string> PossibleAnswers
{
get
{
return _possibleAnswers ?? new List<string>(){"", "", "", "", ""};
}
set
{
_possibleAnswers = value;
}
}
public Question ToQuestion()
{
Question question = new Question
{
Text = this.Text,
IsAssociatedWithProfessor = this.IsAssociatedWithProfessor,
IsAssociatedWithAssistant = this.IsAssociatedWithAssistant,
PossibleAnswers = new List<PossibleAnswer>()
};
//ID will be null if creating new question
if(ID != null)
{
question.ID = (int) ID;
}
foreach (string possibleAnswer in this.PossibleAnswers)
{
if (!String.IsNullOrEmpty(possibleAnswer))
{
question.PossibleAnswers.Add(new PossibleAnswer { Text = possibleAnswer });
}
}
return question;
}
}
这是我创建新问题的发布方法:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddQuestion(QuestionVM questionVM)
{
try
{
if (ModelState.IsValid)
{
Question question = questionVM.ToQuestion();
context.Questions.Add(question);
context.SaveChanges();
return RedirectToAction("Questions");
}
}
catch (DataException /* dex */)
{
//Log the error (uncomment dex variable name and add a line here to write a log.
ModelState.AddModelError("", "Trenutno nije moguće snimiti promjene, pokušajte ponovo.");
}
return View(questionVM);
}
线路:question.PossibleAnswers.Add(new PossibleAnswer { Text = possibleAnswer });
导致异常,因为在将它们添加到问题之前我没有将可能的答案保存在数据库中......但是如何在不使用 DbContext 的情况下将它们添加到数据库中(因为在转换的方法中使用 DbContext 不是一个好习惯查看模型到模型)?
【问题讨论】:
-
贴出一些导致异常的行,同时指出这行导致了异常。
-
好的,我编辑了问题。
-
一切似乎都很好。
QuestionVM中ToQuestion方法的实现是什么? -
我也提出了疑问。
-
在下面查看我的答案。
标签: asp.net-mvc entity-framework