C# 将db初始化和种子注入Azure函数启动是否有效?
在我的ASP.NET核心应用程序中,我使用了以下代码来初始化和种子数据库,特别是用于测试。下面的例子 ASP.NET核心示例: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
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);
}
}