在 _ViewStart.cshtml 内访问 DBContext

Access to DBContext within _ViewStart.cshtml

我想在我的 ASP .Net Core 站点的每个页面上执行一些代码。它主要是设置会话变量。我认为放置它的最佳位置是 _ViewStart.cshtml,但我无法在那里访问我的 dbcontext。所以我的问题有两个——首先,我做错了吗,是否有更好的地方放置这段代码,以便它在网站的每个页面上执行?其次,我如何将我的 dbcontext 注入 _ViewStart.cshtml 以便我可以在那里的代码中进行一些数据库查询?

这是一个像下面这样的工作演示:

1.Be 确定您已经在 _ViewImports.cshtml 中导入了 DbContext 的命名空间,如下所示:

@using YourProjectName.Data

2.Configure 你的 _ViewStart.cshtml 如下所示:

@inject MyDbContext _context;
@{
    Layout = "_Layout";
    ViewBag.Context = _context;
}

3.Get任意razor视图中的数据:

@{
    ViewData["Title"] = "Home Page";
    var data = ViewBag.Context as MyDbContext;
}

@data.Test.Select(u=>u.Name).FirstOrDefault()

4.My 测试模型:

public class Test
{
    public int Id { get; set; }
    public string Name { get; set; }
}

5.My 测试 DbContext:

namespace Mvc3_0.Data
{
    public class MyDbContext : DbContext
    {
        public MyDbContext (DbContextOptions<MyDbContext> options)
            : base(options)
        {
        }

        public DbSet<Test> Test { get; set; }
    }
}