C# 将db初始化和种子注入Azure函数启动是否有效?

C# 将db初始化和种子注入Azure函数启动是否有效?,c#,azure,C#,Azure,在我的ASP.NET核心应用程序中,我使用了以下代码来初始化和种子数据库,特别是用于测试。下面的例子 ASP.NET核心示例: protected override void ConfigureWebHost(IWebHostBuilder builder) { string entityName = $"Data Source=master_data.{typeof(TTestedEntity).Name}.db"; build

在我的ASP.NET核心应用程序中,我使用了以下代码来初始化和种子数据库,特别是用于测试。下面的例子

ASP.NET核心示例:

protected override void ConfigureWebHost(IWebHostBuilder builder)
        {
            string entityName = $"Data Source=master_data.{typeof(TTestedEntity).Name}.db";

            builder.ConfigureServices(services =>
            {
                ServiceProvider serviceProvider = new ServiceCollection()
                    .AddEntityFrameworkSqlite()
                    .BuildServiceProvider();

                services.AddDbContext<MasterDataContext>(options =>
                {
                    options.UseSqlite(entityName);
                    options.UseInternalServiceProvider(serviceProvider);
                });

                ServiceProvider sp = services.BuildServiceProvider();

                using (IServiceScope scope = sp.CreateScope())
                {
                    IServiceProvider scopedServices = scope.ServiceProvider;
                    MasterDataContext db = scopedServices.GetRequiredService<MasterDataContext>();
                    ILogger<DiLibMasterDataWebApplicationFactory<TStartup, TTestedEntity>> logger = scopedServices
                        .GetRequiredService<ILogger<DiLibMasterDataWebApplicationFactory<TStartup, TTestedEntity>>>();

                    db.Database.EnsureDeleted();
                    db.Database.EnsureCreated();

                    MasterDataSeed.Seed(db);
                }
            });

创建托管服务并在启动时执行作用域功能。创建托管服务并在启动时执行作用域功能。
private void ConfigureControlPanel(IFunctionsHostBuilder builder)
        {

            builder.Services.AddDbContext<ControlPanelContext>(options =>
                {
                    options.UseSqlite("Data Source=test.db");
                });
            builder.Services.AddTransient<ModuleValidator>();
            builder.Services.AddTransient<IControlPanelBusinessLogic, ControlPanelBusinessLogic>();

            ServiceProvider sp = builder.Services.BuildServiceProvider();

            using (IServiceScope serviceScope = sp.CreateScope())
            {
                IServiceProvider scopedServices = serviceScope.ServiceProvider;

                ControlPanelContext controlPanelContext = scopedServices.GetRequiredService<ControlPanelContext>();

                controlPanelContext.Database.EnsureDeleted();
                controlPanelContext.Database.EnsureCreated();

                Module m1 = new Module { Name = "asd", Description = "asdd", ModuleRoute = "asd"};
                Module m2 = new Module { Name = "asd2", Description = "asdd2", ModuleRoute = "asd2"};

                controlPanelContext.Modules.Add(m1);
                controlPanelContext.Modules.Add(m2);

            }
        }