как получить доступ к контексту БД в методе / классе stati c в asp. net core 2 - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть веб-приложение asp. net core 2 с EF 6. До сих пор я использовал контекст db, используя внедрение зависимостей, предоставляемое ядром asp. net, для внедрения контекста в контроллеры. :

protected DbContext dbContext;

public BaseController(DbContext context)
{
    dbContext = context;
}

Во многих моих видах бритвы я вызываю метод расширения, чтобы инициализировать сетку Telerik, передавая ей параметры. До сих пор мне не нужно было обращаться к контексту БД, но теперь мне нужно получить доступ к нему в методе расширения для некоторых логик c:

    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.
        }

При попытке создать новый контекст БД изнутри stati c method, он просто не выбирает никаких записей. Мне нужно выяснить, как на самом деле получить доступ к новому экземпляру DbContext или каким-либо образом получить доступ к сервису с заданными областями, определенному в моем Startup.cs:

services.AddScoped(_ => new MantleMapperContext(Configuration.GetConnectionString("DbContext")));

РЕДАКТИРОВАТЬ:

Как предлагается ниже, В итоге я внедрил сервис dbContext прямо в мое представление, а затем передал его в метод следующим образом:

@inject DbContext dbContext

1 Ответ

0 голосов
/ 05 февраля 2020

Вам нужно будет передать свой DbContext или получить экземпляр из контейнера , который вам, в свою очередь, также понадобится для ссылки * stati c (это будет не удается выполнить большинство проверок кода).

Выполнение того, что вы делаете, его инициализация без строки подключения , так как она подключается при вводе

Поскольку это static, Самое лучшее решение - просто передать DbContext

public static GridBuilder<T> BaseProcessGrid<T>(this GridBuilder<T> helper, DbContext db, string controllerName, string gridName)
   where T : class, IProcessViewModel
{
    bool showDelete = false;

    var users = db.Users.ToList(); // <--- gets records.

Обновление

как мне это сделать из вида бритвы?

Я полагаю, что вы можете внедрять сервисы в представления

Внедрение сервисов

Сервис может быть внедрен в представление с использованием директивы @inject , Вы можете думать о @inject как о добавлении свойства к представлению и заполнении свойства с помощью DI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...