0

目前我们正在本地主机上的 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 个答案,显然这里真正的问题是它添加了新的当答案与已编辑的问题一起传递时,这种情况从未发生过。

希望修复将发送已编辑的问题以及与其相关的答案,这样就不会插入新的问题,也不会产生重复的问题。

4

2 回答 2

0

感谢 CodeCaster 关于如何记录所有执行的查询的有用提示,我能够看到实际上添加了正确的数量。

问题在于它根本不应该添加答案!但是因为每当我更新问题时问题属性都有答案,所以它重新添加了所有答案!因此导致我在保存更改的整个过程中看到正确的数字,但之后的数字错误。

非常感谢CC!

于 2012-07-24T12:22:36.213 回答
0

不知道问题是什么,无法从您的问题中读出,所以不知道这是否解决了问题,但我会让 POCO 像这样:

public class Question {
    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; }
    public virtual ICollection<Answer> Answers { get; set; }
}

答案是否有 ID 字段?我猜他们会这样做,当它们与 EF 一起使用时。

于 2012-07-24T12:01:30.060 回答