【发布时间】:2019-11-08 19:49:10
【问题描述】:
我有使用 EF Core 的 ASP.NET Core 2.2 应用程序。在 startup.cs 我将 CommandTimeout 设置为 60 秒
services.AddDbContext<CrowdReason.WMP.Data.Entities.WMPContext>(options =>
options.UseSqlServer(configuration.GetConnectionString("DefaultConnection"),
sqlServerOptions => sqlServerOptions.CommandTimeout(60)));
然后我正在使用以下代码执行存储过程。请注意 cmets 中 t1、t2 和 t3 的值
public static async Task<int?> prcDoWork(this WMPContext dbContext, int id, int userID)
{
var t1 = dbContext.Database.GetCommandTimeout();
// t1 is 60. Same as what i set in startup.cs
using (var connection = dbContext.Database.GetDbConnection())
{
var t2 = connection.ConnectionTimeout;
//t2 is 15
using (var cmd = connection.CreateCommand())
{
var p1 = new SqlParameter("@ID", SqlDbType.Int)
{
Value = id
};
var p2 = new SqlParameter("@UserID", SqlDbType.Int)
{
Value = userID
};
cmd.CommandText = "dbo.prcDoWork";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(p1);
cmd.Parameters.Add(p2);
var t3 = cmd.CommandTimeout;
//t3 is 30
await dbContext.Database.OpenConnectionAsync().ConfigureAwait(false);
var result = await cmd.ExecuteScalarAsync().ConfigureAwait(false);
if (result != null)
{
return Convert.ToInt32(result);
}
return null;
}
}
}
我了解ConnectionTimeout 与CommandTimeout 不同。
但是问题是当我使用connection.CreateCommand() 创建命令时,它不会自动从 DBContext 获取超时
【问题讨论】:
标签: ef-core-2.0 ef-core-2.1 ef-core-2.2