我想更新数据库中的50000条记录,耗时2分钟,有更好的解决方案吗


var EffectedRows = from rfvl in FieldValuesList where rfvl.Record_RecordId == RecordId select rfvl;
foreach (var item in EffectedRows)  
{
var feature = (from RGDF in ctx.FieldValues where  RGDF.RecordId == item.RecordId select RGDF).Single();
{ 
feature.Amount = item.Amount;
feature.Boolean = item.Boolean;
};
}
ctx.SaveChanges();

请参阅:对实体对象执行操作时的性能问题

var EffectedRows = (from rfvl in FieldValuesList 
where rfvl.Record_RecordId == RecordId 
select rfvl)
.ToList();

foreach (var item in EffectedRows)  
{
//this is expensive its a call to the db on each loop
var feature  = (from RGDF in ctx.FieldValues 
where  RGDF.RecordId == item.RecordId select RGDF
).Single()
feature.Amount = item.Amount;
feature.Boolean = item.Boolean;  
}
ctx.SaveChanges();

var EffectedRows = (from rfvl in FieldValuesList 
where rfvl.Record_RecordId == RecordId 
select rfvl)
.ToList();
var ids = EffectedRows.select(x.RecordId)
var features  = ctx.FieldValues.Where(x => ids.Contains(x.RecordId).ToList();
//below is in mem only now.
foreach (var item in EffectedRows)  
{
feature = features.where(x=>x.RecordId == item.RecordId).Single()
feature.Amount = item.Amount;
feature.Boolean = item.Boolean;  
}
//you could consider batchs... this will so help... but my guess is this will be like 13 secs or less
//you can get down to about 4 secs max if you try harder with batching
ctx.SaveChanges();

最新更新