У меня странное поведение. Когда я пытаюсь выполнить SQL процедуру сохранения EF Core 2.2. Я получаю тайм-аут (30 секунд). Но когда я выполняю ту же процедуру в SQL Server Management Studio, она запускается успешно - она запускает ее примерно за 1 или 2 се c.
ОБНОВЛЕНИЕ: Эта проблема возникла около 2 месяцев а go. До этого сервис смог запустить этот профи c.
Вот DbContext
, которое я использую:
public class MyContext : DbContext
{
public MyContext(string connectionString)
: base(new DbContextOptionsBuilder().UseSqlServer(connectionString).Options)
{
}
// some DbSets omitted here ...
public async Task<string> ProcExecuteAsync(string login, string xml)
{
// get some data from db (omitted)
var xmlParameter = new SqlParameter("@XML", SqlDbType.Xml) { Value = xml };
var xmlOutputParameter = new SqlParameter("@XMLoutput", SqlDbType.Xml) { Direction = ParameterDirection.Output };
await Database.ExecuteSqlCommandAsync(
"MyProc_set @idUser=@idUser,@XML=@XML,@XMLoutput=@XMLoutput OUT",
new SqlParameter[] { userIdParameter, xmlParameter, xmlOutputParameter });
return (string)xmlOutputParameter.Value;
}
}
Затем у меня есть обработчик (я использую Mediator
библиотеку):
public class AddToClientCommandHandler : IRequestHandler<AddToClientCommand, AddToClientResponse>
{
private readonly IContextBuilder _contextBuilder;
public AddToClientCommandHandler(IContextBuilder contextBuilder)
{
_contextBuilder = contextBuilder;
}
public async Task<AddToClientResponse> Handle(AddToClientCommand command, CancellationToken cancellationToken)
{
using (var context = _contextBuilder.CreateMyContext())
{
// getting some data from db (omitted)
// generate xmlRequest (omitted)
var result = await context.ProcExecuteAsync(command.Login, xmlRequest);
return new AddToClientResponse(result);
}
}
}
Вот a ContextBuilder
:
public class ContextBuilder : IContextBuilder
{
private readonly IOptions<ConnectionStrings> _connectionStrings;
public ContextBuilder(IOptions<ConnectionStrings> connectionStrings)
{
_connectionStrings = connectionStrings;
}
public MyContext CreateMyContext()
{
var result = new MyContext(_connectionStrings.Value.Entities);
return result;
}
}
И я регистрирую это так:
public static class ApplicationContextBuilderExtension
{
public static void AddApplicationContextBuilder(this IServiceCollection services)
{
services.AddSingleton<IContextBuilder, ContextBuilder>();
}
}
Возможно ли, что проблема связана с тем, что я использую AddSingleton
при регистрации ContextBuilder
?
Может кто-нибудь подсказать мне, как и где исследовать проблему?