Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# dotnet核心实体框架连接已关闭_C#_Entity Framework_.net Core - Fatal编程技术网

C# dotnet核心实体框架连接已关闭

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

我正在尝试创建一个由mssql和实体框架支持的API

在我开始连接前端之前,一切似乎都很顺利

我收到的异常信息是
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"));