1

私はWebアプリケーションを使用してAzureでホストしていますが、階層に関係なくSQLプールが完全に高速になるという問題があります。 ApplicationDbContextを処分する必要があると私は考えていましたが、これは必須ですか?これは役に立ちますか?私は他のActionResultの方法で同じコンテキストを使用していますが、ASP.NETコアでApplicationDbContextを破棄する

private readonly ApplicationDbContext _context; 
private readonly IEmailSender _emailSender; 

public MessagesController(ApplicationDbContext context, IEmailSender emailSender) 
{ 
    _context = context; 
    _emailSender = emailSender; 
} 

// GET: Message 
[Authorize] 
public async Task<IActionResult> Index() 
{ 
    var user = _context.Users.Where(u => u.Email.Equals(User.Identity.Name)).Select(u => 
    new { u.Name, u.Subdomain, u.PhotoURL }).FirstOrDefault(); 
    ViewData["Name"] = user.Name; 
    ViewData["Subdomain"] = user.Subdomain; 
    ViewData["PhotoURL"] = (user.PhotoURL == null) ? "../../img/avatar.png" : user.PhotoURL; 
    List<Message> messages = await _context.Messages.Where(m => m.UserName.Equals(User.Identity.Name)) 
    .Select(m => new Message { ID = m.ID, DateTime = m.DateTime, Text = m.Text }).ToListAsync(); 
    return View(messages); 
} 

私は_context.dispose()を呼び出す必要があります:以下

指数はSQLのほとんどの時間を利用した方法で私のクラスの一部ですか?

は)いいえ、あなたは(_context.disposeを呼び出す必要はありませんそんなに

答えて

1

をありがとう - IoCコンテナは、それらの登録中に使用された有効期間の設定に基づいてリソースを解放します。

さらに、「他のActionResultメソッドでも同じコンテキストを使用していますか?」と書いてあります。それは真実ではありません - 少なくとも、それは真実であってはなりません。コンテキストは、要求ごとに作成する必要があります。そのため、コントローラの各アクションを呼び出すと新しいリクエストが生成され、コンテナが注入される新しいコンテキストを作成しています(新しいリクエストが実行されるたびにコントローラが再び作成されます)。 - スコープあなたはDbContextのデフォルトの寿命を使用している。これにより

services.AddDbContext<SchoolContext>(options => options.UseSqlServer(CONNECTION_STRING)); 

:ここ

はあなたのコンテキストを登録する方法です。

+0

あなたの答えをありがとう。あなたが上記に書いたことをやったことがありますか?なぜ私のプールが非常に速くいっぱいになったのかまだ理解していないからです。上記のコードに問題があるかどうか教えてください。 – Techy

+0

コードは正常に見えます... –

関連する問題