如何在静态方法或控制器外的类中获取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?
答案
你可以将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的主要内容,如果未能解决你的问题,请参考以下文章
自定义一个SpringUtil用于通过静态方法获取被spring管理的bean对象,用于在静态方法中使用IOC中的bean或者是没有被spring管理的类中使用IOC容器的bean
自定义一个SpringUtil用于通过静态方法获取被spring管理的bean对象,用于在静态方法中使用IOC中的bean或者是没有被spring管理的类中使用IOC容器的bean