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