我有以下方法:
public async Task<int> AddCallDetail(List<CallDetail> addCallDetail)
{
int added = 0;
using (InContactEntities context = new InContactEntities())
{
DateTime minDateTime = (from c in addCallDetail select c.StartDateTime).Min();
DateTime maxDateTime = (from c in addCallDetail select c.EndDateTime).Max();
var l = from d in addCallDetail
join c in context.CallDetails.Where(cc => cc.StartDate >= minDateTime && cc.StartDate <= maxDateTime)
on d.MasterContactID equals c.MasterContactID into dc
from c in dc.DefaultIfEmpty()
select new { cOne = d, cTwo = c == null ? null : c };
List<CallDetail> callDetail = (from d in l where d.cTwo == null select d.cOne).ToList();
if (callDetail != null && callDetail.Count != 0)
{
try
{
context.CallDetails.AddRange(callDetail);
added = await context.SaveChangesAsync();
}
catch (Exception ex)
{
Console.WriteLine(ex.InnerException.InnerException.Message);
added = -1;
}
}
}
return added;
}
这会将我们的电话系统api中的呼叫信息添加到我构建的数据库中。这将一次处理最多50,000条记录,但平均而言,它将处理10,000-15,000条记录。无论记录数量多少,linq表达式都将在2秒内持续运行,但行added = await context.SaveChangesAsync()
需要很长时间才能处理。很长一段时间我的意思是大约20分钟才能增加11K行。现在呼叫是异步和等待的,减少了一些影响,但我仍然希望尽可能快地插入记录。有什么建议吗?
它插入的表确实有两个外键,两个外键都被检查以确保在插入之前存在记录。