iT邦幫忙

0

LINQ批量更新問題

  • 分享至 

  • xImage

有一個Excel的資料,要匯入資料庫內的tableA,此資料表的cID不會重複,程式碼如以下。
我想問的事情是,為何不需要註解的那一行,程式已經判定我的資料是修改模式?

using (AYEntities db=new AYEntities())
{
    var data_tableA = db.tableA.Where(t => t.bCANCEL == false).ToList();
    var Excel_tableA = (from row in dt.AsEnumerable()
                        select new tableA
                        {
                           cNAME = row.Field<string>("姓名"),
                           cID = row.Field<string>("編號"),
                           cRe = row.Field<string>("備註"),
                           dUPD = DateTime.Now,
                        }).ToList();
    var Dt = (from t1 in data_tableA
              from t2 in Excel_tableA
              where t1.cID == t2.cID
              select new { t1, t2 }).ToList();
    Dt.ForEach(t =>
               {
                t.t1.cNAME = t.t2.cNAME;
                t.t1.cRe = t.t2.cRe;
                t.t1.dUPD = DateTime.Now;
               });
    var Dt2 = Dt.Select(t => t.t1).ToList();
    //Dt2.ForEach(t=> db.Entry(t).State = EntityState.Modified);
    db.SaveChanges();
}
powerc iT邦研究生 5 級 ‧ 2022-05-26 09:40:31 檢舉
因為預設是追蹤查詢,這時候你做的更改會改變實體狀態。
https://docs.microsoft.com/zh-tw/ef/core/querying/tracking
優悠 iT邦新手 3 級 ‧ 2022-05-27 15:33:08 檢舉
原來預設追蹤阿,我看資料都說要加 Attach,才算追蹤,以為我上面的程式碼未追蹤
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
天黑
iT邦研究生 5 級 ‧ 2022-05-24 16:22:00
最佳解答

幫你找了,有沒有設定EntityState.Modified,有設定是除了PK都更新,沒設定是只更新變更欄位,相關參考資料

1
asd3733653
iT邦新手 2 級 ‧ 2022-05-24 17:31:24

因為你的資料集是從
data_tableA = db.tableA.Where(t => t.bCANCEL == false).ToList();...
拿來的,EntityFrame預設會去追蹤
所以不需要更改EntityState他就是更新的動作
有錯誤的話請指教
你可以下中斷點在
var data_tableA = db.tableA.Where(t => t.bCANCEL == false).ToList();
的下一行
執行db.Entry(data_tableA).State
就知道了

我要發表回答

立即登入回答