簡體   English   中英

使用實體框架鏈接表運行更新語句

[英]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.

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