这个问题刚开始出现。该语句已经运行了几个月,现在我一直收到下面的超时错误。当我在SSMS上直接执行相同的语句时,它在一秒钟内返回。该表有44000条记录,并且对5列进行了索引,其中一个是州。
select distinct(state) from [ZipCodeDatabase]
我正在运行以下Linq语句
states = ZipCodeRepository.Get(orderBy: z => z.OrderBy(o => o.State)).Select(z => z.State).Distinct().ToList();
当我运行这个linq语句时,我一直得到超时错误,而且不知道为什么,因为之前是正常工作的。
我包括了
Get()
函数,它是一个通用的仓储函数,但也许我漏掉了什么,导致延迟。获取函数:
public virtual IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "") //params Expression<Func<TEntity, object>>[] includes
{
IQueryable<TEntity> query = dbSet;
if (filter != null)
{
query = query.Where(filter);
}
foreach (var includeProperty in includeProperties.Split
(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
if (orderBy != null)
{
return orderBy(query).ToList();
}
else
{
return query.ToList();
}
}
超时错误:
注:此处的超时错误是指数据访问中的操作未能在规定的时间内完成,导致连接被中断。System.Data.SqlClient.SqlException (0x80131904):操作未完成或服务器无响应,超时时间已过。---> System.ComponentModel.Win32Exception (0x80004005):等待操作超时。 at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action
1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlDataReader.TryCloseInternal(Boolean closeReader) at System.Data.SqlClient.SqlDataReader.Close() at System.Data.Common.DbDataReader.Dispose(Boolean disposing) at System.Data.Common.DbDataReader.Dispose() at System.Data.Common.Internal.Materialization.Shaper1.Finally() at System.Data.Common.Internal.Materialization.Shaper
1.SimpleEnumerator.Dispose() at System.Collections.Generic.List1..ctor(IEnumerable
1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable1 source) at ClientsToProfitsKendoUI.DAL.GenericRepository
1.Get(Expression1 filter, Func
2 orderBy, String includeProperties)
datetime
转换为nvarchar
时,我曾经看到过这种情况发生。在查询窗口中少于1毫秒的操作,在通过代码发送时会超时。唯一的检查方法是使用查询分析器并查看发生了什么。 - Simon Whitehead