none
entity framework4 刪除時很慢 RRS feed

  • 問題

  • 請問我在刪除單據表身時.DeleteObject速度很慢,卡很久.

    資料庫中約9萬筆資料,是因為entity framework4沒有整批刪除的關係嗎?

    試過foreach方式,沒有比較快,如何加快刪除速度呢?

                DbTransaction db;
                if (context.Connection.State != ConnectionState.Open)
                {
                    context.Connection.Open();
                }
                db = context.Connection.BeginTransaction();
                try
                {
                    var rowSsal = (Ssal)(ssalBindingSource.Current);
                    if (rowSsal != null)
                    {
                        //刪除明細記錄
                        if (rowSsal.Ssal1.Count != 0)
                        {

                            // 這裡很慢

                            context.DeleteObject(rowSsal.Ssal1.First());

                        }
                        //刪除表頭記錄
                        context.DeleteObject(rowSsal);
                        context.SaveChanges();
                    }
                    db.Commit();
                    PrimaryID = SsalNoLabel.Text;
                    return true;
                }
                catch (Exception ex)
                {
                    db.Rollback();
                    MessageBox.Show(ex.Message, "刪除錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return false;
                }

    2020年10月5日 上午 03:49

所有回覆

  • 看看這篇討論有沒有幫助:

    DbContext is very slow when adding and deleting

    2020年10月5日 上午 06:08
  • dbContext.Configuration.AutoDetectChangesEnabled EF4中沒有QQ

    有其他方法,或怎麼把EF4轉成EF6?

    2020年10月5日 上午 07:59
  • 迴圈或迭代中先執行 DeleteObject,最後才呼叫 SaveChanges 和 Commit 試試看。

    類似這樣

    ConnectionOpen
    BeginTransaction

    foreach (…..) { DeleteObject } SaveChagnes Commit



    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/



    2020年10月5日 下午 03:01
    版主
  • 升級的做法可以參考:

    Upgrading to Entity Framework 6

    2020年10月6日 上午 12:20
  • 有試過迴圈的方式,速度沒有提升.
    2020年10月6日 上午 01:05
  • 升級EF6之後,有 dbContext.Configuration.AutoDetectChangesEnabled 了.

    可是出現新的問題,

    1.可是參考裡的 System.Data.Entity 版本是 4.0.0.0 , 執行階段版本是v4.0.30319,這樣對嗎?

    2.原本程式,出現沒有定義,例如:不包含 'SavingChanges' 的定義,也找不到擴充方法 'SavingChanges'....

       我有 Using System.Data.Entity.  

    2020年10月6日 上午 02:03
  • System.Data.Entity的參考要移除掉:

    • 已編輯 tihsMVP 2020年10月6日 上午 06:45
    2020年10月6日 上午 06:44
  • 今天重新檢視這個問題,發現原來是 BindingSource 物件造成。

    先補充一下程式環境背景.

    我的form中,有二個BindingSource物件, A (單據表頭) B (表身). 

    A的DataSource是資料集. B的DataSource則是 A (有作關聯)

    今天發現一個問題,

    我有拉一些TextBox 來輸入表身資料,這些TextBox有Binding到B.

    想不到每個 TextBox 做Binding時, 都會發送一段指令到SQL ,

    重新下載A的資料.20個物件會發送40次.我的天天天呀~

    只好重構程式碼,B的DataSource也直接從資料集中取得.就解決這個問題,

    再測試一下刪除的速度問題,也跟著解決了.

    2020年12月3日 上午 09:05