• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

在ASP.NET Core中部署ApplicationDbContext

entity-framework 来源:Techy 4次浏览

我有一个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方法相同的情况下?

谢谢你这么多

===========解决方案如下:

不,你不必调用_context.dispose() – IoC容器将发布基于寿命设置这是在注册他们使用的资源。

更重要的是,你写到“我在其他ActionResult方法中使用相同的上下文?”。这不是真的 – 至少它不应该是真的。应根据请求创建上下文。因此,在调用每个控制器操作时,您正在生成新的请求,并且容器正在创建要注入的新上下文(每当新请求完成时,控制器将再次创建)。

这里是你应该如何注册方面:

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

通过这一点,你正在使用默认的生存期的DbContext – 作用域。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)