我正在调查我的网络服务中一个棘手的重现错误。我已通过以下流程证明查询失败:
Item c = _itemRepository.GetByCode(code);
if (c == null)
// this line was hit.
throw new Exception("invalid code");
指定的代码在"失败的流"期间有效,并且当使用相同的参数再现时,查询运行正常。我怀疑是,由于某些原因,由于服务器资源有限或数据库引擎繁忙,查询无法找到相关内容。我想到了可能的到期超时,但在这种情况下,应该直接从GetByCode
调用抛出异常。相反,代码执行正常(大约100毫秒)并返回null Item。同样,我100%肯定所提供的参数是合法的并且调用应该成功:使用相同参数进行的其他调用运行良好。
存储库在其构造函数中存储私有_db DBContext
。下面的被调用方法直接在上下文实例上运行。
public Item GetByCode(string itemCode)
{
return _db.Items
.Include("Field1")
.Include("Field2")
.SingleOrDefault(p => p.ItemCode == itemCode && p.Field1.IsReady);
}
我正在使用EntityFramework 4.0。对于可能发生的事情的任何想法都表示赞赏。