我有一个使用实体框架从 SQL Server 2012 加载数据的 Web API。
我创建了一个存储库并使用 Ninject 和一个接口,我使用 Web API 中的具体类。
在一些 Get 请求中,我需要提供 JSON 数据,它不像图表那么大,但关系非常规范化。
我已将实体映射到以 JSON 格式返回给客户端的模型。
因此,在以下查询中,我需要所有这些数据。
var result = _dbContext.Quotes.Where(
quote => quote.UserId == user.MemberId)
.Include(quote => quote.AdditionalRequirements)
.Include(quote => quote.QuoteSpecialRequirements.Select(qsr => qsr.RequirementType))
.Include(quote => quote.City)
.Include(quote => quote.Country)
.Include(quote => quote.Area)
.Include(quote => quote.Rooms.Select(room => room.RoomType)).ToList();
如果我调用该服务,这将导致EntityCommandExecutionException
带有 InnerException aSystem.Data.SqlClient.SqlException
和消息“超时已过期。在操作完成之前超时时间已过或服务器没有响应。”,这又会产生System.ComponentModel.Win32Exception
带有消息“等待操作”的 InnerException时间到”。
现在我在想当我的数据增长时会发生什么,以及如何考虑处理这个问题并使其在未来变得高效。
备择方案?查询需要重组吗?
我在想,我应该延长 web api 中的超时过期值吗?
这些操作还不能等待,考虑将它们包装在 Task.Run 中是否会提高 Web API 调用的性能。
另一种解决方案是使用 SQL Server 过程。
[编辑]
带有数据库中相关表的图表屏幕截图。
这是从实体框架创建的查询,使用了探查器并得到了它。
谢谢你。