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

问题描述 投票:0回答:1

当我在控制器外部的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

asp.net-mvc asp.net-core-mvc
1个回答
0
投票

你可以将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();
    }
© www.soinside.com 2019 - 2024. All rights reserved.