【问题标题】:how to get a dbContext of applicationDbContext in a static method or in a class outside a controller如何在静态方法或控制器外部的类中获取 applicationDbContext 的 dbContext
【发布时间】:2018-03-05 16:46:26
【问题描述】:

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

当我在部分视图中时,我想从服务器添加一些数据。

applicationdbcontext 运行良好,但我无法在任何公共类中将它放在控制器之外

方法应该是这样的:get current dbcontext, open table, get data

【问题讨论】:

    标签: asp.net-mvc asp.net-core-mvc


    【解决方案1】:

    您可以将IServiceProvider 传递给类并从IServiceProvider 创建新的作用域ApplicationDbContext
    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();
        }
    

    【讨论】:

    • 这是个好主意。如果在多线程 asp.net 上运行静态 _dbContent 会遇到专业问题,我不确定。到目前为止,如果它会在 _static 下产生问题,那么我将能够在运行时创建它。谢谢你的代码。我今天会试试看。
    猜你喜欢
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多