C# dotnet核心实体框架连接已关闭
我正在尝试创建一个由mssql和实体框架支持的API 在我开始连接前端之前,一切似乎都很顺利 我收到的异常信息是C# dotnet核心实体框架连接已关闭,c#,entity-framework,.net-core,C#,Entity Framework,.net Core,我正在尝试创建一个由mssql和实体框架支持的API 在我开始连接前端之前,一切似乎都很顺利 我收到的异常信息是System.invalidoOperationException:连接未关闭。连接的当前状态为打开。或System.InvalidOperationException:操作无效。连接已关闭。取决于哪个API首先完成 这里是chromes视图 我的startup.cs中有以下内容 services.AddDbContext<ApplicationContext>(opt
System.invalidoOperationException:连接未关闭。连接的当前状态为打开。
或System.InvalidOperationException:操作无效。连接已关闭。
取决于哪个API首先完成
这里是chromes视图
我的startup.cs中有以下内容
services.AddDbContext<ApplicationContext>(opt => {
opt.UseSqlServer(new SqlConnection(Configuration["CONNECTIONSTRINGS_AZURECONNECTION"]), builder => builder.MigrationsAssembly("Application.Web"));
opt.UseOpenIddict();
});
services.AddIdentity<User, Role>()
.AddEntityFrameworkStores<ApplicationContext, Guid>()
.AddDefaultTokenProviders();
services.AddDbContext(opt=>{
opt.UseSqlServer(新的SqlConnection(配置[“CONNECTIONSTRINGS_AZURECONNECTION]”),builder=>builder.migrationassembly(“Application.Web”);
opt.UseOpenIddict();
});
服务.额外性()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
我的所有存储库都有范围
services.AddScoped<INotificationRepository, NotificationRepository>();
services.addScope();
数据库上下文也是如此
services.AddScoped<ApplicationContext, ApplicationContext>();
services.addScope();
两个控制器基本相同
private readonly INotificationRepository _notificationRepository;
public NotificationsController(UserManager<User> userManager, INotificationRepository notificationRepository)
:base(userManager)
{
_notificationRepository = notificationRepository;
}
[HttpGet]
public async Task<IActionResult> GetAsync()
{
var user = await GetCurrentUserAsync();
return new OkObjectResult(await _notificationRepository.FindByAsync(n => n.User == user));
}
私有只读INotificationRepository\u notificationRepository;
公共通知控制器(UserManager UserManager,INotificationRepository notificationRepository)
:base(用户管理器)
{
_notificationRepository=notificationRepository;
}
[HttpGet]
公共异步任务GetAsync()
{
var user=await GetCurrentUserAsync();
返回新的OkObjectResult(wait _notificationRepository.FindByAsync(n=>n.User==User));
}
我认为每个请求都需要确定上下文的范围,对吗?
每个chrome调用都是一个单独的请求,它将创建一个单独的作用域
所以每个电话基本上是:
谷歌帮不上忙,所以我假设我做了一些不正确的事情:)原来是这句话:
opt.UseSqlServer(new SqlConnection(Configuration["CONNECTIONSTRINGS_AZURECONNECTION"]), builder => builder.MigrationsAssembly("Application.Web"));
一旦我把它改成这个,一切都按预期进行
opt.UseSqlServer(Configuration["CONNECTIONSTRINGS_AZURECONNECTION"], builder => builder.MigrationsAssembly("Application.Web"));