我正在尝试使用.netCore 2.1从数据库中删除超过5000条记录。我有下面的方法,它工作得很好,但是它需要太长的时间。
public async Task<bool> deleteAdhocDetails(int[] id)
{
var status = false;
for (var x = 0; x < id.Length; x++)
{
var existingReward = await _context.AdhocRewardInfo
.Where(d => d.RowID == id[x])
.FirstOrDefaultAsync<AdhocRewardInfo>();
if ((existingReward != null) && (existingReward.HaloRewardCode != null))
{
try
{
//removing existingReward
_context.AdhocRewardInfo.Remove(existingReward);
await _context.SaveChangesAsync();
status = true;
}
catch (Exception e)
{
throw e;
}
}
}
return status;
} 我目前正在使用EFCore.BulkExtensions来插入记录,它工作得很好。我试过使用BulkDelete,但似乎没有什么不同。我也尝试过使用Z.EntityFramework.Extensions.EFCore,但也不能正常工作。我还应该提一下,我对此还是个新手。如果有人能给我指出正确的方向,我将不胜感激。谢谢
在adhoc.service.ts中:
deleteAdhocRecipients(id: number[]): Promise<boolean> {
return this.http.put<boolean>(this.baseUrl + 'deleteAdhocDetails', id)
.toPromise();
}在.ts文件中:
this.general
.load(this.aService.deleteAdhocCampaign(this.adhocForm.get('create.id').value))
.then(
y => {
if (deleteArr.length > 0) {
this.general.load(this.aService.deleteAdhocRecipients(deleteArr))
.then(
f => this.router.navigate(['/adhoc-campaign/lookup'])
);
} else {
this.router.navigate(['/adhoc-campaign/lookup']);
}
}
);发布于 2021-09-13 12:11:43
我优化了你的c#代码
public async Task<bool> deleteAdhocDetails(int[] id){
try{
var deletedRecords= await _context.AdhocRewardInfo.Where(d =>
id.Contains(d.RowID))
foreach (var item in deletedRecords)
{
_context.AdhocRewardInfo.Remove(item );
}
await _context.SaveChangesAsync();
return true;
}catch (Exception e){
return false;
}
}发布于 2021-09-13 12:31:32
您可以删除对对象的选择,然后只执行一次saveChanges
public async Task<bool> deleteAdhocDetails((int id, object haloRewardCode)[] id)
{
try
{
for (var x = 0; x < id.Length; x++)
{
var existingReward = new AdhocRewardInfo() { id = id[x].id, HaloRewardCode = id[x].haloRewardCode };
if ((existingReward != null) && (existingReward.HaloRewardCode != null))
{
//removing existingReward
_context.AdhocRewardInfo.Remove(existingReward);
}
}
}
catch (Exception e)
{
throw;
}
await _context.SaveChangesAsync();
return true;
}发布于 2021-09-15 14:41:18
我建议使用linq2db.EntityFrameworkCore (免责声明:我是创建者之一)。
而Delete将会尽可能快:
var deletedCount = await _context.AdhocRewardInfo
.Where(d => id.Contains(d.RowID))
.DeleteAsync();https://stackoverflow.com/questions/69161000
复制相似问题