我试图修改我的连接字符串以包含一个扩展超时,并且我已经确认在 sql server 端,提供我的 EF 对象的视图在几秒钟内执行并返回总共 3000 或更少的记录。
但是当我尝试通过代码运行它时,我现在遇到了超时问题,我正在寻求一些建议来解决这个问题。我得到“执行超时已过期。在操作完成之前超时时间已过或服务器没有响应。” 我在特定错误中找到的大多数解决方案都建议修改连接字符串或 this.context.CommandTimeout ... 我无法弄清楚如何在这种情况下使用。
我已经包含了我用来获取所需数据的方法。如果有更有效的方法请告诉我。
输入参数是:
int? inputSKU = null
int? inputStoreNum = null
DateTime? inputStartDate = null
目的是返回完整列表。
它挂起,因为它跳过了所有条件位:
var qUniqueOffers = query.GroupBy(q => q.Plan_Number).ToList();
谢谢你。
private List<PromotionItem> QueryPromotion(int? inputSKU, int? inputStoreNum, DateTime? inputStartDate)
{
log.Info("Client requested QueryPromotion");
List<PromotionItem> resultQuery = new List<PromotionItem>();
try
{
using (DWH_Entities db = new DWH_Entities())
{
var query = db.vw_Web_Promotion.AsQueryable();
// filter promotion results that don't match SKU#
if (inputSKU != null)
query = query.Where(q => q.Sku_Number == inputSKU);
// filter promotion results that don't match Store Num
if (inputStoreNum != null)
query = query.Where(q => q.Store_Number == inputStoreNum);
// filter promotion results that don't match Promotion Start Date
if (inputStartDate != null)
query = query.Where(q => q.Start_Date >= inputStartDate);
// Group promotions By Plan Number ('Promotion ID')
var qUniqueOffers = query
.GroupBy(q => q.Plan_Number)
.ToList();
// Select first from each group to get unique details
var qOffers = qUniqueOffers
.Select(g => g.OrderBy(gi => gi.Plan_Number).First())
.ToList();
foreach (var qo in qOffers)
{
resultQuery.Add(new PromotionItem
{
PromotionNumber = qo.Plan_Number.Trim(),
PromotionDescription = qo.Plan_Description.Trim(),
StartDate = qo.Start_Date,
EndDate = qo.End_Date
});
}
}
}
catch (Exception e)
{
log.Error("[" + e.TargetSite + "] | " + e.Message);
throw e;
}
return resultQuery;
}