簡體   English   中英

實體框架使用連接更新多個記錄

[英]entity framework update multiple records using join

我正在嘗試使用實體框架更新多個記錄,但不確定如何進行。

基本設置:

class Appointment
{
    public int Id {get; set;}
    public double Charge {get; set;}
    public DateTime Time {get; set;}
}

該視圖顯示約會的列表,然后對控制器Post操作的調用傳遞給Ienumerable<Appointment>

public async Task<int> UpdateAppointments(IEnumerable<Appointment> appointments){
    // code goes here
    var appointmentsToUpdate = await _context
           .Appointments
           .Where(a => a.time > DateTime.Now).ToListAsync();

    // what to do here??
    // loop through appointmentsToUpdate and find the relevant 
    // record inside appointment, and then do an update? 
    // Seems like a merge would be more efficient.

}

我想做的是合並約會和ReservationsToUpdate並更新約會時間。 在另一種情況下,以不同的授權,例如,我希望管理員只能更改約會費用,因此不能刪除所有記錄並附加新記錄。

看來您可以使用純sql語句執行此操作,但是appointments參數作為IEnumerable而不是作為數據庫中已存在的表傳遞,如以下答案中所示: 使用SQL批量記錄更新

首先,您可以使用Linq進行這種更新嗎? 是否直接轉換為實體框架(核心)?

如果沒有擴展項目或存儲SQL,則最好的辦法是將約會附加為未更改的實體,並將目標屬性標記為已修改。

您附加的約會只需要鍵屬性和填充的時間。

像這樣:

class Db : DbContext
{

    public DbSet<Appointment> Appointments { get; set; }

    public void UpdateAppointmentTimes(IEnumerable<Appointment> appointments)
    {
        foreach(var a in appointments)
        {
            this.Appointments.Attach(a);
            this.Entry(a).Property(p => p.Time).IsModified = true;
        }
        this.SaveChanges();
    }
     . . .

它將僅更新單個事務中所有這些約會的已更改列。

暫無
暫無

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

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