2017-01-21 11 views
0

mssqlとエンティティのフレームワークに裏打ちされたAPIを作成しようとしています。dotnetコアエンティティのフレームワークの接続が閉じていません

フロントエンドに接続するまでは、すべてうまくいくようです。

最初に終了するAPIに応じて、System.InvalidOperationException: The connection was not closed. The connection's current state is open.またはSystem.InvalidOperationException: Invalid operation. The connection is closed.という例外が発生します。ここで

は、私は私のリポジトリのすべてがそう

services.AddScoped<INotificationRepository, NotificationRepository>(); 

をスコープとしている

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(); 

私startup.csに以下の持っている chrome

クローム図であるデータベースコンテキスト

です
services.AddScoped<ApplicationContext, ApplicationContext>(); 

両方のコントローラは基本的に私は、コンテキストは、要求ごとにスコープする必要があることを考えるに訂正同じ

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)); 
} 

アムですか? そして、各クロムコールは別のスコープを作成する別々のリクエストですか?

したがって、各呼び出しは基本的に次のようになります。

  1. 要求

  2. 認証フィルタ

  3. コントローラ

  4. 非同期機能

  5. 非同期現在のuを取得SER - コントローラ

Googleはので、私は私が仮定何の助けではありませんからリポジトリ

  • リターンから>リターンユーザー(コンテキストを破棄いけない)

  • 非同期リポジトリ機能

  • リターン間違って何かをしている:

  • 答えて

    0

    それはこの行だった:

    opt.UseSqlServer(new SqlConnection(Configuration["CONNECTIONSTRINGS_AZURECONNECTION"]), builder => builder.MigrationsAssembly("Application.Web")); 
    

    私はこのすべてにそれを変更したら期待通りに動作します

    opt.UseSqlServer(Configuration["CONNECTIONSTRINGS_AZURECONNECTION"], builder => builder.MigrationsAssembly("Application.Web")); 
    
    関連する問題