簡體   English   中英

帶有列表的 EF Core 更新

[英]EF Core Update with List

要使用 Entity Framework Core 更新 SQL 服務器的記錄,我查詢需要更新的記錄,對 object 進行更改,然后調用.SaveChanges() 這很好用而且很干凈。

例如:

var emp = _context.Employee.FirstOrDefault(item => item.IdEmployee == Data.IdEmployee);
emp.IdPosition = Data.IdPosition;
await _context.SaveChangesAsync();

但是,如果我想更新多條記錄,有標准方法嗎?

我的第一種方法是使用一個列表將其傳遞給 controller,但隨后我需要通過該列表 go 並每次保存更改,從未真正完成此選項,因為我認為它不是最佳的。

現在我所做的不是將列表傳遞給 controller,而是使用 for 將每個 object 傳遞給 controller。 (有點像……)

for(int i = 0; i < ObjectList.Count; i ++) 
{
    /* Some code */
    var httpResponseObject = await MyRepositories.Post<Object>(url+"/Controller", Object);
}

然后像以前一樣在 controller 上做同樣的事情,當只更新一條記錄時,對於每條記錄......

我不覺得這是最好的方法,但我還沒有找到另一種方法。

這樣做的最佳方法是什么?

您的問題與 Blazor 無關......但是,我不確定我是否理解問題所在。 當您調用 SaveChangesAsync 方法時,您的上下文中的所有更改都將提交到數據庫。 您不必一次傳遞一個 object...您可以傳遞對象列表

希望這可以幫助...

使用 Entity Framework 或其他 Object 關系映射 (ORM) 庫批量更新記錄是一個常見的挑戰,因為它們將為每條記錄運行UPDATE命令。 您可以嘗試使用Entity Framework Plus ,這是進行批量更新的擴展。

如果一次調用更新多條記錄對您來說至關重要,我建議您只編寫一個存儲過程並從您的服務中調用。 Entity Framework 還可以運行直接查詢和存儲過程。

看起來用戶進行了一些更改,然后保存操作需要同時保留多條記錄。 您可以觸發多個 AJAX 調用,或者,如果需要,只觸發一個。

我要做的是使用 API controller 和特定於您的需求的操作創建一個端點。 例如,要更新表中記錄的 position:

Controller:

/DataOrder

行動:

[HttpPut]
public async void Update([FromBody] DataChanges changes)
{
    foreach(var change in changes)
    {
        var dbRecord = _context.Employees.Find(change.RecordId);
        dbRecord.IdPosition  = change.Position;
    }
    _context.SaveChanges();
}  

public class DataChanges
{
    public List<DataChange> Items {get;set;}

    public DataChangesWrapper()
    {
        Items = new List<DataChange>();
    }
}

public class DataChange
{
    public int RecordId {get;set;}
    public int Position {get;set;}
}

foreach語句將為每條記錄執行一次UPDATE 但是,如果您想要單個數據庫調用,則可以編寫 SQL 查詢或在數據庫中使用存儲過程並將數據作為DataTable參數傳遞。

暫無
暫無

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

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