0

我有一个使用实体框架从 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 过程。

[编辑]

带有数据库中相关表的图表屏幕截图。

图表截图

这是从实体框架创建的查询,使用了探查器并得到了它。

SQL 查询

谢谢你。

4

0 回答 0