【发布时间】:2019-03-04 09:56:09
【问题描述】:
如何在 ExecuteQueryDynamic 上的 LinqPad 上设置我的查询超时?
Util.CurrentDataContext.ExecuteQueryDynamic($"SELECT count(*) FROM MyDb.dbo.{viewName}");
我想使用这个超时来检测太慢的视图。对于每个视图,我都请求计数,但是当计数花费太多时间时,我就停止它并计算下一个视图。
这是我的完整 LINQPad 代码
void Main()
{
// In case of error "There is already an open DataReader associated with this Command which must be closed first."
// https://stackoverflow.com/q/6062192/196526
// Add MultipleActiveResultSets=true to connection string.
var biewsCount = b.V_sysobjects.Where(v => v.Type == "V").Count();
var bViewsDetail = Util.OnDemand<List<SysObject>>("Get Views Detail", () => GetViewsDetail("b", b.V_sysobjects.Where(v => v.Type == "V").Select(v => v.Name).ToList()));
bViewsDetail.Dump();
}
public List<SysObject> GetViewsDetail(string database, List<string> objectNames)
{
var result = new List<SysObject>();
foreach (var name in objectNames)
{
Console.Write($"{database}.dbo.{name}");
// I should add a timeout stuff here or before
var count = (int)Util.CurrentDataContext.ExecuteQueryDynamic($"SELECT count(*) FROM {database}.dbo.{name}").Select(y => y).Single();
Console.Write($" {count}\n");
result.Add(new SysObject
{
Database = database,
ObjectName = name,
Rows = count
});
}
return result;
}
public class SysObject
{
public string Database { get; set; }
public string ObjectName { get; set; }
public string ObjectType { get; set; }
public string IndexName { get; set; }
public long Rows { get; set; }
public long? TotalPages { get; set; }
public long? UsedPages { get; set; }
public long? DataPages { get; set; }
public long? TotalSpaceMB { get; set; }
public long? UsedSpaceMB { get; set; }
public long? DataSpaceMB { get; set; }
}
【问题讨论】:
-
喜欢
Util.CurrentDataContext.CommantTimeout? -
没有改变任何东西
-
你在使用EntityFramework吗?
-
@Arif 使用的是 LINQPad,所以我使用的是实体框架
-
你有
Util.CurrentDataContext.Database.CommandTimeout这样的属性吗?