- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
应用程序启动后第一次访问数据库时出现以下错误 - “无法将类型为‘System.Data.ProviderBase.DbConnectionClosedConnecting’的对象转换为类型‘System.Data.SqlClient.SqlInternalConnectionTds’
该错误只抛出一次,在应用程序启动后,第一个方法尝试从数据库中读取数据。第二次再次调用相同的方法,一切正常。
将 .net core 1.1 与 Entity Framework 结合使用
最佳答案
我最近在使用 EF Core 的 ASP.NET Core 2 应用程序中遇到了同样的异常。在我的例子中,根本原因是我的依赖注入(inject) DbContext 的范围有问题。我有一个 Controller 和一个服务,它们都使用注入(inject)的 DbContext。该服务是单例的,如下所示:
public class TestService{
public TestService(FooDbContext db)
{
this.db = db;
}
}
public class FooController{
public FooController(FooDbContext db, TestService testService)
{
this.testService = testService;
this.db = db;
}
}
public class Startup{
public void ConfigureServices(IServiceCollection services){
//...
services.AddDbContext<FooDbContext>(options =>
options
.UseSqlServer(Configuration.GetConnectionString("FooDbContext"))
);
services.AddSingleton<TestService>();
}
}
所以 Controller 会使用它的实例,然后如果单例服务也尝试使用它自己的实例,那么它会在大约 90% 的时间内给出错误。我不太清楚为什么这会成为一个问题,或者是间歇性的,但在调试过程中很明显 EF 正在重用一些底层资源。我没有深入研究 EF 代码调试,但我怀疑 Controller 实例已关闭,而服务实例重用了连接,期望它是打开的。在阅读中,其他人建议连接字符串中的 MultipleActiveResultSet=true 可以修复,但这并没有解决我的问题。在我的例子中,修复是在 Startup.cs 中将服务更改为 Transient,这在这种情况下是可以接受的,并且可能更好:
services.AddTransient<TestService>();
关于c# - 无法将类型为 'System.Data.ProviderBase.DbConnectionClosedConnecting' 的对象转换为类型“System.Data.SqlClient.SqlInternalConnectionTds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46138168/
.NET ProviderBase是在 .NET Framework 2.0 版本中建立的。从那时起,是否有任何新功能可以取代或改进这种模式,可以用作替代方案? 最佳答案 提供者模式肯定已经过时了,但
我们有许多基于提供者模型/模式的项目。 (从各种来源读取文件,从各种来源创建报告等)我一直找不到与 .net 5 中的 ProviderBase 等效的任何东西。我们需要一个可以在运行时配置的抽象接口
我的网站大部分时间都运行良好,但有时我会收到超时过期错误,并且在 1-15 分钟内无法执行任何操作。第一次出现错误时是: The timeout period elapsed prior to com
应用程序启动后第一次访问数据库时出现以下错误 - “无法将类型为‘System.Data.ProviderBase.DbConnectionClosedConnecting’的对象转换为类型‘Syst
我正在尝试将当前项目从 Jackson 1.9 升级到 2.5。一切都很顺利,直到我尝试启动我的 WAS 7 服务器并收到此错误: org.springframework.beans.factory.
我是一名优秀的程序员,十分优秀!