在 ASP .Net Core MVC 中启动时执行数据库更新

Posted

技术标签:

【中文标题】在 ASP .Net Core MVC 中启动时执行数据库更新【英文标题】:Executing DB Update on Startup in ASP .Net Core MVC 【发布时间】:2021-12-10 17:52:51 【问题描述】:

我正在开发一个应用程序,该应用程序应该从一台服务器获取数据并将数据放入我的数据库中。我目前正在努力更新初创公司的数据库。

我尝试了几种方法,例如创建一个调用更新数据库的模型的操作(没有运气),我尝试研究是否有办法在 Startup 类中执行此操作,但再次没有运气。

我现在有这些方法

TfsMethods.cs(模型类)

    public TfsMethods(ApplicationDbContext db)
    
        _db = db;
    

    public void UpdateDbBranches()
    
        var branches = GetAllBranches();
        var dbBranches = _db.Branches;
        foreach (var branch in branches)
        
            if (dbBranches.Where(x => x.BranchName == branch.BranchName) == null)
            
                _db.Add(branch);
            
        
    

其中_dbApplicationDbContext,GetAllBranches() 是一种从一台服务器获取数据的方法,我想将这些数据放入我的数据库中。

BranchController.cs(控制器类)

public IActionResult UpdateDbBranches()
    
        TfsMethods tfs = new TfsMethods( _db );
        try
        
            tfs.UpdateDbBranches();
            return Ok();
        
        catch( Exception e )
        
            return Problem( e.ToString() );
        
    

这里的问题是我不知道在初创公司中如何称呼它,即使在 razor 页面或 Startup.cs 上也是如此

这是否可能,或者是否有任何实现可以帮助我解决这个问题?

【问题讨论】:

看看后台服务docs.microsoft.com/en-us/aspnet/core/fundamentals/host/… 你想如何实际触发这个?通常,数据传输是按计划或其他特定触发器触发的。在 Web 应用程序启动时触发数据传输是非常不寻常的。这些数据应该多久传输一次?您似乎正在尝试使用 Web 应用程序进行数据集成。 诸如“没有运气”之类的描述意味着您还没有分析它实际上是如何失败的。您需要这样做才能描述失败的原因。 【参考方案1】:

已经有几个有用的答案在: Application startup code in ASP.NET Core

但是,您应该首先考虑您是否真的想在启动时或按计划执行此操作。参见 Quartz.net 例如:https://www.infoworld.com/article/3529418/how-to-schedule-jobs-using-quartznet-in-aspnet-core.html

如果您尝试进行所谓的数据库播种,这些链接(以及这些讨论中的链接)可能对您有用:

https://github.com/Homely/Homely.AspNetCore.Hosting.CoreApp/issues/11 https://github.com/dotnet/aspnetcore/issues/10137 https://github.com/App-vNext/Polly/issues/638

【讨论】:

以上是关于在 ASP .Net Core MVC 中启动时执行数据库更新的主要内容,如果未能解决你的问题,请参考以下文章

asp.net core mvc剖析:处理管道构建

如何使用 C# 在 ASP.NET Core 3.1 MVC 中使用会话变量

asp.net core 5 mvc 超级管理员连接

如何在 ASP.NET CORE 5.0 MVC 中将登录设置为默认路由

asp.net core 系列 5 MVC框架路由(上)

在 asp .net CORE / MVC 6 应用程序中设置 Swagger 时出现 500 错误