[英]Best Update Perfomance with Entity Framework
我正在使用Entity Framework 6.1.3。 我有一個ob對象的列表(與數據庫表相同的屬性),在執行更新語句時如何達到最佳性能?
在執行任何插入操作時,我可以使用AddRange()方法插入列表的所有項目。 是否有可能在更新語句上執行此操作?
現在,我將在列表上進行一次foreach,然后調用update方法:
public void UpdateZeitenPaar(int? pc_c_mandant_id, int? pc_d_zeiten_id, int pc_d_zeiten_paare_id, string personalnummer, DateTime? kommZeit, DateTime? gehZeit, int? kommID, int? gehID, decimal? zeitIst, decimal? zeitPause, int? pc_d_aktivitaet_id, DateTime? datum)
{
pc_d_zeiten_paare paar = db.pc_d_zeiten_paare.SingleOrDefault(p => p.pc_c_mandant_id == pc_c_mandant_id && p.pc_d_zeiten_paare_id == pc_d_zeiten_paare_id);
paar.datum = datum;
paar.gehZeit = gehZeit;
paar.geh_pc_d_buchungsdaten_id = gehID;
paar.kommZeit = kommZeit;
paar.komm_pc_d_buchungsdaten_id = kommID;
paar.pc_c_mandant_id = pc_c_mandant_id;
paar.pc_d_aktivitaet_id = pc_d_aktivitaet_id;
paar.pc_d_zeiten_id = pc_d_zeiten_id;
paar.personalnummer = personalnummer;
paar.zeitIst = zeitIst;
paar.zeitPause = zeitPause;
db.SaveChanges();
}
EF為每個對象上的數據操作在SaveChanges
創建一個單獨的查詢。 甚至刪除多個對象也會導致創建多個DELETE
查詢。 您可以使用async/await
縮短UI響應時間:
public async Task UpdateZeitenPaar()
{
var paar = await db.pc_d_zeiten_paar.SingleOrDefaultAsync(...);
// [...]
await db.SaveChangesAsync();
}
您在每次更新調用中都得到該項目,這很可能是您的問題。
pc_d_zeiten_paare paar = db.pc_d_zeiten_paare.SingleOrDefault(p => p.pc_c_mandant_id == pc_c_mandant_id && p.pc_d_zeiten_paare_id == pc_d_zeiten_paare_id);
您最有可能使用foreach調用此方法在項目中循環遍歷,並在某些集合中使用id參數。 您可以嘗試將所有實體立即加載到要更新的內存中。
// This will load all the instances to the context, so they are already in the memory and no round trip to db is required
// Assuming your myItemList is the list that contains your item types and the id's of the items you are going to update
var materializedList = db.pc_d_zeiten_paare.Where(p => myItemList.Any(myp => myp.pc_d_zeiten_paare_id == p.pc_d_zeiten_paare_id).ToList();
// do your normal update logic here
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.