在ASP.NET Core中配置ApplicationDbContext

entity-framework-core

我有一個Web應用程序並在Azure中託管它,但問題是SQL池無論層級如何都快速完全。我在想,也許我需要處理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方法中使用相同的上下文嗎?

一般承認的答案

不,您不必調用_context.dispose() - IoC容器將根據註冊時使用的生命週期設置釋放資源。

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

以下是註冊背景的方法:

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

這樣你就可以使用DbContext的默認生命週期 - 作用域。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow