目前我们正在本地主机上的 WampServer 上运行 MySQL 数据库。我们有几个类,并使用 POCO 类将它们映射到数据库表。
我们有一个存储库,用于按照标准处理所有创建、编辑和删除。我们向这个存储库传递一个 Question 对象,这个问题对象具有基本属性,例如 id、文本,还包含一个导航属性以链接到该问题的所有答案。
在 poco 类问题中,所有答案都存储为 ICollection。几周以来,这一直运行良好,能够毫无问题地更新、删除和创建。
现在突然之间,每当我们尝试编辑一个问题时,它都会导致其答案呈指数级重复,2 变成 4 变成 8,在我们知道它之前,我们在试图解决这个问题时有近 6 万个答案。
存储库中用于编辑问题的代码:
public void EditQuestion(Question question)
{
var tempquestion = Context.Questions.Single(q => q.Question_Id == question.Question_Id);
tempquestion.Question_Help = question.Question_Help;
tempquestion.Question_Text = question.Question_Text;
tempquestion.Question_Type = question.Question_Type;
context.SaveChanges();}
我们已经在每一行都设置了断点,检查了答案属性,它在整个过程中保持正确的数字,然后它命中 context.saveChanges() 如果我们突然发现它的结果是重复的.
进一步说明和要求的代码:
是的,我为此使用实体框架,我应该指定。
我对这个问题的 poco 课程是这样的:
public int Question_Id { get; set; }
public string Question_Text { get; set; }
public string Question_Help { get; set; }
public string Question_Type { get; set; }
[Display(Name = "Set ID")]
public int Set_Id { get; set; }
public Set Set { get; set; }
private ICollection<Answer> _answers;
public ICollection<Answer> Answers
{
get
{
if (_answers == null)
{
_answers = Arep.GetAnswers(this.Question_Id);
}
return _answers;
}
set
{
_answers = value;
}
} //a collection of answers belonging to this question
编辑2:我想我现在可能离真正的问题又近了一大步。感谢 CodeCaster 的有用链接,我检查了我的最后一个查询,当它有 2 个答案时,它只执行 2 个插入语句,这是预期的,但我最终得到 4 个答案,显然这里真正的问题是它添加了新的当答案与已编辑的问题一起传递时,这种情况从未发生过。
希望修复将发送已编辑的问题以及与其相关的答案,这样就不会插入新的问题,也不会产生重复的问题。