【发布时间】:2020-02-05 02:57:18
【问题描述】:
我有一个带有 EF 6 的 asp.net core 2 web 应用程序。到目前为止,我使用 db context 的方式是使用 asp.net core 提供的依赖注入将上下文注入控制器:
protected DbContext dbContext;
public BaseController(DbContext context)
{
dbContext = context;
}
在我的许多 Razor 视图中,我调用扩展方法来初始化 Telerik 网格,并传递选项。到目前为止,我还不需要访问 db 上下文,但现在我需要在扩展方法中访问它以获得一些逻辑:
public static GridBuilder<T> BaseProcessGrid<T>(this GridBuilder<T> helper, string controllerName, string gridName)
where T : class, IProcessViewModel
{
bool showDelete = false;
//check if the current user has edit rights
using (var db = new DbContext())
{
var users = db.Users.ToList(); // <--- this just doesn't get any records.
}
当试图从静态方法中实例化一个新的数据库上下文时,它只是不获取任何记录。我需要弄清楚如何实际访问 DbContext 的新实例,或者以某种方式访问 Startup.cs 中定义的范围服务:
services.AddScoped(_ => new MantleMapperContext(Configuration.GetConnectionString("DbContext")));
编辑:
如下所示,我最终将 dbContext 服务直接注入到我的视图中,然后将其传递到方法中,如下所示:
@inject DbContext dbContext
【问题讨论】:
-
我建议创建一个 View 组件,为您的扩展方法构建一个
OptionModel。
标签: c# asp.net-core entity-framework-6