【问题标题】:Asp.Net Core run once functionAsp.Net Core 运行一次功能
【发布时间】:2017-02-14 13:10:12
【问题描述】:

当启动 Asp.Net Core 时,我必须通过 EntityFrameworkCore 调用数据库,我必须在用户“会话”期间只运行一次

有什么建议吗?

【问题讨论】:

标签: asp.net asp.net-core


【解决方案1】:

我通常使用 IHostedService。 Andrew Lock 对此有一个 great article

本质上,您要做的是实现 IHostedService 接口并将您的 DB 代码放在 StartAsync 方法中。

public class MigratorHostedService: IHostedService
{
    // We need to inject the IServiceProvider so we can create 
    // the scoped service, MyDbContext
    private readonly IServiceProvider _serviceProvider;
    public MigratorStartupFilter(IServiceProvider serviceProvider)
    {
        _serviceProvider = serviceProvider;
    }

    public async Task StartAsync(CancellationToken cancellationToken)
    {
        // Create a new scope to retrieve scoped services
        using(var scope = _seviceProvider.CreateScope())
        {
            // Get the DbContext instance
            var myDbContext = scope.ServiceProvider.GetRequiredService<MyDbContext>();

            //Do the migration asynchronously
            await myDbContext.Database.MigrateAsync();
        }
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        // noop
        return Task.CompletedTask;
    }
}

此代码直接取自上述文章,仅用于回答所提问题。所有功劳必须转给Andrew Lock

【讨论】:

猜你喜欢
  • 2019-05-13
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 2020-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多