如何在静态方法或控制器外的类中获取applicationDbContext的dbContext

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在静态方法或控制器外的类中获取applicationDbContext的dbContext相关的知识,希望对你有一定的参考价值。

当我在控制器外部的asp.net核心类中工作时,例如从我的数据库表tbl_Notes获取一些记录,然后我需要一个_dbcontext或ApplicationDBContext来请求数据。

        public static async Task<User_SumModel> get_User_Sums(ClaimsPrincipal parUser)
    {
        //------------< get_User_Sums(User) >------------
        //*get User Summary Table
        //return null;

        if (parUser == null) return null;
        ApplicationDbContext _dbContext = Common.DB.get_DbContext();
        long sIDUser = await getIDUser_as_Number(parUser, _dbContext);
        User_SumModel summary = await _dbContext.tbl_User_Sums.FirstOrDefaultAsync(u => u.IDUser == sIDUser);

        return summary;
        //------------</ get_User_Sums(User) >------------
    }

但是我如何在公共任务或共享类中获得_dbContext?

当我在局部视图中,然后我想从服务器添加一些数据。 enter image description here

applicationdbcontext运行良好,但我无法在任何公共类enter image description here的控制器之外

方法应该是这样的:获取当前的dbcontext,打开表,获取数据enter image description here

答案

你可以将IServiceProvider传递给Class并从ApplicationDbContext创建新的范围IServiceProvider。 1.简单的代码如下:

public class DataSeed
{       

    public static async Task InitializeData(IServiceProvider serviceProvider, bool createUsers = true)
    {
        using (var serviceScope = serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope())
        {
            var _context = serviceScope.ServiceProvider.GetService<ApplicationDbContext>();

            //use _context as your requirement
        }
    }
}

2.打电话给全班

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, IAntiforgery antiforgery)
    {           
        //seed init data
        DataSeed.InitializeData(app.ApplicationServices).Wait();
    }

以上是关于如何在静态方法或控制器外的类中获取applicationDbContext的dbContext的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在java中使用类外的静态方法吗?

如何在控制台应用程序中使用main方法外的计时器

自定义一个SpringUtil用于通过静态方法获取被spring管理的bean对象,用于在静态方法中使用IOC中的bean或者是没有被spring管理的类中使用IOC容器的bean

自定义一个SpringUtil用于通过静态方法获取被spring管理的bean对象,用于在静态方法中使用IOC中的bean或者是没有被spring管理的类中使用IOC容器的bean

C++ 静态方法(在不同的类中)(如 Java 的)

java如何在一个普通的类中获取request对象