【问题标题】:Connection string property has not been initialized Entity Framework Core连接字符串属性尚未初始化 Entity Framework Core
【发布时间】:2020-02-20 06:57:06
【问题描述】:

在我的 GenericRepository 中遇到这个异常消息

ConnectionString 属性尚未初始化

我已经像这样在Startup.cs 中配置了我的连接:

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

我有另一个查询,我正在调用存储过程及其获取记录。但是当我从 EF 访问数据库时,它会抛出这个错误。

注意:我已经为这段代码编写了一个单元测试,它可以工作并从数据库中获取记录。

堆栈跟踪

在 System.Data.SqlClient.SqlConnection.PermissionDemand() 在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection externalConnection,DbConnectionFactory connectionFactory,TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1 重试) 在 System.Data.SqlClient.SqlConnection.OpenAsync(CancellationToken cancelToken) 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 Microsoft.EntityFrameworkCore.Storage.RelationalConnection.d__48.MoveNext() 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.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.AsyncQueryingEnumerable1.AsyncEnumerator.<BufferlessMoveNext>d__12.MoveNext() at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.<ExecuteAsync>d__72.MoveNext() 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable1.AsyncEnumerator.<MoveNext>d__11.MoveNext() at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Linq.AsyncEnumerable.SelectEnumerableAsyncIterator2.d__7.MoveNext() 在 D:\a\1\s\Ix.NET\Source\System.Interactive.Async\Select.cs:line 106 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 System.Runtime.CompilerServices.ConfiguredTaskAwaitable1.ConfiguredTaskAwaiter.GetResult() at System.Linq.AsyncEnumerable.AsyncIterator1.d__10.MoveNext() 在 D:\a\1\s\Ix.NET\Source\System.Interactive.Async\AsyncIterator.cs:line 98 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.ExceptionInterceptor1.EnumeratorExceptionInterceptor.<MoveNext>d__5.MoveNext() at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable1.ConfiguredTaskAwaiter.GetResult() 在 System.Linq.AsyncEnumerable.d__63.MoveNext() in D:\a\1\s\Ix.NET\Source\System.Interactive.Async\Aggregate.cs:line 120 at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter1.GetResult() 在 Repositories.GenericRepository`1.d__9.MoveNext() 中 Repositories\Implementations\GenericRepository.cs:line 122

【问题讨论】:

  • Configuration.GetConnectionString("DefaultConnection") 的值是多少?
  • 值为"Server=.;Database=DBName;Trusted_Connection=True;ConnectRetryCount=0;Integrated Security=SSPI;"
  • @gsharp 我创建了一个单元测试来测试我的存储库方法及其工作正常,没有例外

标签: c# .net entity-framework asp.net-core ef-core-2.0


【解决方案1】:

问题是我在我的存储库之前调用了 SPROC,我以老式方式调用 SPROC。从context.Database.GetConnectionString() 获取连接字符串并在 using 语句中使用该变量,该语句被包装在 try catch finally 块中。执行 SPROC 后,我手动关闭连接。这会导致存储库级别的异常。一旦我关闭连接字符串 EF 将无法连接到数据库,因为它的连接已在 using 语句中处理。

我找到了 2 个简单的解决方案 1.(推荐)我让 SPROC 返回多个表,这样我就不必再次调用存储库。 2.(不推荐)我将Stratup.csservices.AddScoped&lt;DbContext, DataContext&gt;();更新为services.AddTransient&lt;DbContext, DataContext&gt;();。如果您不熟悉此选项,我强烈建议您不要使用它。 Have a look at this link for further clarification

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-14
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2011-07-22
    • 2012-08-20
    相关资源
    最近更新 更多