Ho un'applicazione web e l'ho ospitata in Azure, ma il problema è che il pool SQL è completamente veloce indipendentemente dal livello. Stavo pensando che forse ho bisogno di disporre ApplicationDbContext, è necessario? questo sarebbe d'aiuto?
Quanto segue è una parte della mia classe con il metodo Index che utilizza la maggior parte del tempo 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);
}
Dovrei chiamare _context.dispose () anche se sto usando lo stesso contesto in altri metodi ActionResult?
No, non è necessario chiamare _context.dispose () - il contenitore IoC rilascerà le risorse in base all'impostazione di durata utilizzata durante la registrazione.
Inoltre, hai scritto che " sto usando lo stesso contesto in altri metodi ActionResult? ". Non è vero - beh almeno non dovrebbe essere vero. Il contesto dovrebbe essere creato per richiesta. In questo modo, durante la chiamata a ciascuna delle azioni del controller, viene generata una nuova richiesta e il contenitore crea un nuovo contesto da iniettare (ogni volta che viene eseguita una nuova richiesta, il controller viene creato nuovamente).
Ecco come devi registrare il tuo contesto:
services.AddDbContext<SchoolContext>(options => options.UseSqlServer(CONNECTION_STRING));
Con questo si utilizza la durata predefinita per DbContext - ambito.