1

我有一個Web應用程序並將其託管在Azure中,但問題在於無論層如何,SQL池都快速完成。 我在想,也許我需要處理ApplicationDbContext,這是必需的嗎?這會有幫助嗎?在ASP.NET Core中部署ApplicationDbContext

以下是我的類與方法利用指數大部分時間SQL部分:

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()雖然我使用其他的ActionResult方法相同的情況下?

謝謝你這麼多

回答

1

不,你不必調用_context.dispose() - IoC容器將發佈基於壽命設置這是在註冊他們使用的資源。

更重要的是,你寫到「我在其他ActionResult方法中使用相同的上下文?」。這不是真的 - 至少它不應該是真的。應根據請求創建上下文。因此,在調用每個控制器操作時,您正在生成新的請求,並且容器正在創建要注入的新上下文(每當新請求完成時,控制器將再次創建)。

這裏是你應該如何註冊方面:

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

通過這一點,你正在使用默認的生存期的DbContext - 作用域。

+0

感謝您的回答。我已經完成了你上面寫的內容,我是否應該將它用在聲明中?因爲我仍然不明白爲什麼我的泳池變得非常快。你能否告訴我,如果我對上面的代碼有任何問題? – Techy

+0

你的代碼看起來很好... –