我有以下异步方法查询数据库上的一些数据。
private async Task<List<MyObject>> GetTotalConcert(DateTime d1, DateTime d2, string[] name)
{
using (RegistrationDbContext context = new RegistrationDbContext())
{
IQueryable<MyObject> results;
results = (from t1 in context.Table1
join t2 in context.Table2 on t1.Id equals t2.Id
where (t2.CreatedOn >= d1 && t2.CreatedOn < d2)
&& (name.Contains(t2.Name))
&& t1.EventName.Equals("Concert")
select new MyObject
{
Id = t2.Id,
EventName = t1.EventName,
Status = t2.Status,
ProjectName = t2.Name
});
return await results.Distinct().ToAsyncEnumerable().ToList();
}
}
在日期范围过宽的情况下,此代码会因超时异常而失败。我试图通过这样做来增加超时:
public class RegistrationDbContext : DbContext
{
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
base.Database.SetCommandTimeout(300);
}
// Some more code here....
}
我在这里做错了什么吗?如果我在数据库本身上运行 SQL 查询,相同的日期范围需要将近 18 秒......
我正在使用 ASP.NET 5 MVC6 和 EF7。
对于这些时间范围太宽并且数据库需要更多时间来返回数据的情况,我该如何摆脱超时异常?