在 _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; }
}
}
我想在我的 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; }
}
}