[英]Run Update Statement Using Entity Framework Linked Table
使用 EF Core 控制台應用程序,我需要讓管理員用戶能夠 select 一個復選框,然后按下按鈕,基本上運行這個偽代碼語句
update EF Table set active = 'Yes' where userID = userID of checkbox
我用 EF 運行Select
沒有問題,但如何進行更新?
編輯
我目前有這種語法
foreach ((int Id, DateTime? submissionDate, string status) tuple in apiData)
{
if (ctx.Test.Any(x => x.OrderId == tuple.Id))
{
Test ts = new Test();
ts.Status = tuple.status;
ctx.Test.Add(ts);
ctx.SaveChanges();
}
else
{
Test ts = new Test();
ts.OrderId = tuple.Id;
ts.PdfDownloaded = tuple.submissionDate;
ts.Status = tuple.status;
ctx.Test.Add(ts);
ctx.SaveChanges();
}
}
但是當我運行代碼時,我在更新(if)時收到此錯誤。
System.InvalidOperationException:“無法跟蹤實體類型“Test”的實例,因為已經在跟蹤具有相同鍵值 {'OrderId'} 的另一個實例。 附加現有實體時,請確保僅附加一個具有給定鍵值的實體實例。 考慮使用“DbContextOptionsBuilder.EnableSensitiveDataLogging”來查看沖突的鍵值。
編輯 2
我也嘗試過這種方法
var records = ctx.Test.Where(x => x.OrderId == tuple.Id);
records.ForEach(x => x.Status = tuple.status);
ctx.SaveChanges();
但我在foreach
上得到了這個編譯錯誤
“IQueryable”不包含“ForEach”的定義,並且找不到接受“IQueryable”類型的第一個參數的可訪問擴展方法“ForEach”(您是否缺少 using 指令或程序集引用?)
您應該首先獲取要更新的記錄
var records = context.EFTable.Where(x => x.userID == UserId).ToList();
然后你應該在所有這些對象上將 active 設置為 yes
records.ForEach(x => x.active = "yes");
最后,保存所有更改
context.saveChanges();
還將 SaveChanges 置於循環之外
var entity = context.table.WHERE(userId == checkBox).FirstOrDefault();
entity.property = "value"
context.saveChanges();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.