Свойство строки подключения не было инициализировано Entity Framework Core - PullRequest
0 голосов
/ 24 октября 2019

Обнаружено это сообщение об исключении в моем GenericRepository

Свойство ConnectionString не было инициализировано

Я уже настроил свое соединение в Startup.cs следующим образом:

services.AddDbContext<DataContext>(opt => opt.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

У меня есть другой запрос, где я вызываю хранимую процедуру и ее записи выборки. Но когда я обращаюсь к БД из EF, она выдает эту ошибку.

ПРИМЕЧАНИЕ. Я написал тест UNIT для этого фрагмента кода, и он работает и извлекает записи из базы данных.

Трассировка стека

в System.Data. SqlClient.SqlConnection.PermissionDemand () в System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal (DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource 1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource 1 повторная попытка). ExceptionServices. Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) в Microsoft.EntityFrameworkCore.Storage.RelationalConnection.d__45.MoveNext () в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) в Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable.numerable.nception. System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) в Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable 1.AsyncEnumerator.<MoveNext>d__11.MoveNext() at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Linq.AsyncEnumerable.SelectEnumerableAsyncIterator 2.d__7.MoveNext () в D: \ a \ 1. NET.Interactive.Async \ Select.cs: строка 106 в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (целевая задача) в System.Runtime.21Afair. d__10.MoveNext () в D: \ a \ 1 \ s \ Ix.NET \ Source \ System.Interactive.Async \ AsyncIterator.cs: строка 98 в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в System.Runtime. CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача задачи) в Microsoft.EntityFrameworkCore.Query.Inuer.AsyncLinqOperatorProvider.ExceptionInterceptor 1.EnumeratorExceptionInterceptor.<MoveNext>d__5.MoveNext() at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable 1.ConfiguredTaskAwaiter.GetResult () в System.Linq.AsyncEnumerable.d__6 * репозиторий 1. 1). d__9.MoveNext () в репозитории \ Implementations \ GenericRepository.cs: строка 122

1 Ответ

0 голосов
/ 31 октября 2019

Проблема заключалась в том, что я вызывал SPROC перед своим хранилищем, я звонил SPROC по-старому. Получил строку подключения из context.Database.GetConnectionString() и использовал эту переменную в операторе using, и этот оператор был заключен в блок try catch catch finally. После выполнения SPROC я вручную закрываю соединение. Которые вызывают исключения на уровне хранилища. Как только я закрою строку соединения, EF не сможет подключиться к БД, поскольку его соединение было удалено с помощью оператора.

Я нашел 2 простых решения 1. (Рекомендуется) Я заставил SPROC возвращать несколько таблиц так,что мне не нужно снова вызывать хранилище. 2. (Не рекомендуется) Я обновляю Stratup.cs с services.AddScoped<DbContext, DataContext>(); до services.AddTransient<DbContext, DataContext>();. Если вы не знакомы с этим вариантом, я настоятельно рекомендую не использовать его. Посмотрите эту ссылку для уточнения

...