2012-07-24 197 views
0

目前我們正在本地主機上的WampServer上運行MySQL數據庫。我們有幾個類,並使用POCO類將它們映射到數據庫表。Context.SaveChanges()導致重複問題

我們有一個處理所有創建,編輯和刪除標準的存儲庫。 我們通過這個存儲庫一個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個答案,顯然這裏真正的問題是它添加新的當答案與一個從未發生過的編輯問題一起傳遞時。

希望解決的辦法是將編輯後的問題連同沒有答案的問題一起發送,這樣就不會插入新的問題,也不會產生重複問題。

+0

POCO看起來像什麼?你用什麼DAL?實體框架? – 2012-07-24 11:20:37

+0

[記錄您的查詢](http://stackoverflow.com/questions/650238/how-to-show-the-last-queries-executed-on-mysql),因爲您發佈的代碼沒有問題。你確定這裏有重複嗎? – CodeCaster 2012-07-24 11:21:14

+0

@SteenT是實體框架,請參閱poco類的編輯 – RhysW 2012-07-24 11:49:32

回答

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一起使用時,我想他們會這樣做。

0

感謝CodeCaster有關如何記錄所有執行查詢的有用提示,我能夠看到正確添加了正確的數量。

問題在於它不應該添加所有答案!但因爲問題屬性有答案,只要我更新問題,它重新添加所有答案!因此,導致我看到正確的數字,以保存更改的整個方式,但後來錯誤的數字。

非常感謝CC!