У меня есть служба в ASP.NET Core, в которую я вставляю свой контекст Entity Framework Core, который используется для определения частного функционала, который понадобится моей службе.Эта функция предназначена для вызова хранимой процедуры.
Первый вызов этой функции систематически приводит к ошибке
Свойство ConnectionString не было инициализировано.
Однако с последующими вызовами все в порядке.
Вот конструктор класса обслуживания:
private readonly Func<Task<long>> _myFunc;
public MyService(MyContext context) => _myFunc= async () =>
{
using (var connection = context.Database.GetDbConnection())
{
await connection.OpenAsync();
using (var command = connection.CreateCommand())
{
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "sp_MyStoredProcedure";
command.Parameters.Add(new SqlParameter("@AParameter", SqlDbType.Int) { Value = 1 });
return (long)await command.ExecuteScalarAsync();
}
}
};
Вот это stacktrace
:
System.InvalidOperationException: Свойство ConnectionString не было инициализировано.
в System.Data.SqlClient.SqlConnection.PermissionDemand ()
в System.Data.SqlClient.SqlConnectionFactory.PermissionDemand (DbConnection outerConnection)
в системе.Data.ProviderBase.DbConnectionInternal.SqlConnection.OpenAsync (CancellationToken cancellationToken) --- Конец трассировки стека из предыдущего местоположения, где было сгенерировано исключение --- в Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnectionAsync (логические ошибки Expected, CancellationToken cancellationToken)
ОБНОВЛЕНИЕ:
Когда я устанавливаю точку останова в строке await connection.OpenAsync()
и смотрю на переменную connection
, строка соединения там и корректна.
Обратите внимание, что MyServices
вводится в конструктор контроллера.Регистрация услуги осуществляется следующим образом: startup.cs
:
services.AddTransient<IMyService, MyService>();