簡體   English   中英

實體框架導航屬性記錄從一個記錄移動到另一個記錄“等待操作超時”

[英]Entity Framework Navigational property record moving from one record to another “Wait operation timed out”

我在Entity框架庫中從這個簡單的函數中感到頭痛。 我已經做了一百萬次類似的事情了,但是這個只是讓我一個WIN32Exception等待操作超時

個性化(1 - *)禮品

不知何故,我希望我不能將禮物從Individu遷移到另一個,因為我正在循環我正在改變的同一組。

我檢查了sys.dm_tran_locks,這沒有在sql中的任何一個表上顯示任何正在運行的鎖。

   public void MigrateDataForInd(Individu from, Individu to){
        foreach (var item in from.Gifts.ToList()) {
            to.Gifts.Add(item);
            //also tried: item.Individu = to;
        }
        this.SaveChanges();
     }

關於如何規避這個問題的任何想法? (增加鎖定超時時間沒有幫助,並且在使用其他導航屬性時我得到相同的錯誤(禮物只是其中之一)

更新:給你們一個我正在處理的數據量的圖像:

有+ - 500.000 INdividus,總共有±1000萬禮物。 每個人都有0到100個禮物

您是否認為這個原因足以將此代碼從EF中移除並在更新查詢中運行遷移? (從上面的數據中你可以看到我只在一個事務中更新了100行,這已經給了我超時)

這里有+ - 500.000 INdividus,共有1000萬到1000萬禮物。 每個人都有0到100個禮物

您是否認為這個原因足以將此代碼從EF中移除並在更新查詢中運行遷移? (從上面的數據中你可以看到我只在一個事務中更新了100行,這已經給了我超時)

絕對! 您需要有一個非常令人信服的理由將所有數據從數據庫中取出以便稍后發回。 性能差異很大。

對於原始問題,看起來非常錯誤,這是在這種情況下直接轉到SQL的另一個原因。 如果您遇到更新問題,請查看執行計划,它可能會讓您更接近。

如果您嘗試這樣做怎么辦:

 public void MigrateDataForInd(Individu from, Individu to){
        var offlineGifts = from.Gifts.ToList();
        foreach (var offlineGift in offlineGifts ) {
            from.Gifts.DeleteObject(offlineGift );
            to.Gifts.Add(offlineGift );
        }
        this.SaveChanges();
     }

或者也許在第二個foreach循環中調用SaveChanges?

Jeroen幾乎在那里:)

它應該刪除。

public void MigrateDataForInd(Individu from, Individu to)
{
    var offlineGifts = from.Gifts.ToList();
    foreach (var item in offlineGifts)
    {
        from.Gifts.Remove(item);
        to.Gifts.Add(item);
    }
    this.Save();
}

超時時間不能解決這個問題,

代碼有問題,不要使用.Tolist(),我修改了上面的代碼,嘗試一下,可能對你有幫助

 public void MigrateDataForInd(Individu from.Gifts, Individu1 to){
        foreach (var item in from.Gifts) {
            to.Gifts.Add(item);            
        }
        this.SaveChanges();
     }

我在這里考慮個人是列表對象,有另一個列表禮品

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM