mirror of
https://github.com/collinbarrett/FilterLists.git
synced 2026-03-11 09:04:27 +00:00
begin adding seed
This commit is contained in:
parent
9c87c46179
commit
bb1823ac4c
3 changed files with 4986 additions and 0 deletions
44
src/FilterLists.Api/DbContextExtension.cs
Normal file
44
src/FilterLists.Api/DbContextExtension.cs
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
// https://garywoodfine.com/how-to-seed-your-ef-core-database/
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using FilterLists.Data;
|
||||
using FilterLists.Data.Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace FilterLists.Api
|
||||
{
|
||||
public static class DbContextExtension
|
||||
{
|
||||
private const string SeedDirectory = "Seed";
|
||||
|
||||
public static bool AllMigrationsApplied(this DbContext context)
|
||||
{
|
||||
var appliedMigrationIds = context.GetService<IHistoryRepository>()
|
||||
.GetAppliedMigrations()
|
||||
.Select(m => m.MigrationId);
|
||||
var allMigrationKeys = context.GetService<IMigrationsAssembly>()
|
||||
.Migrations
|
||||
.Select(m => m.Key);
|
||||
return !allMigrationKeys.Except(appliedMigrationIds).Any();
|
||||
}
|
||||
|
||||
public static void EnsureSeeded(this FilterListsDbContext context)
|
||||
{
|
||||
SeedFilterLists(context);
|
||||
}
|
||||
|
||||
private static void SeedFilterLists(FilterListsDbContext context)
|
||||
{
|
||||
if (context.FilterLists.Any()) return;
|
||||
var types = JsonConvert.DeserializeObject<List<FilterList>>(
|
||||
File.ReadAllText(SeedDirectory + Path.DirectorySeparatorChar + "FilterLists.json"));
|
||||
context.AddRange(types);
|
||||
context.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
4930
src/FilterLists.Api/Seed/FilterLists.json
Normal file
4930
src/FilterLists.Api/Seed/FilterLists.json
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -1,7 +1,9 @@
|
|||
using FilterLists.Api.DependencyInjection.Extensions;
|
||||
using FilterLists.Data;
|
||||
using FilterLists.Services.DependencyInjection.Extensions;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.HttpOverrides;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
|
|
@ -40,6 +42,16 @@ public void Configure(IApplicationBuilder app)
|
|||
{
|
||||
routes.MapRoute("default", "v{version:apiVersion}/{controller=Default}/{action=Get}/{id?}");
|
||||
});
|
||||
MigrateAndSeedDatabase(app);
|
||||
}
|
||||
|
||||
private static void MigrateAndSeedDatabase(IApplicationBuilder app)
|
||||
{
|
||||
using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
|
||||
{
|
||||
serviceScope.ServiceProvider.GetService<FilterListsDbContext>().Database.Migrate();
|
||||
serviceScope.ServiceProvider.GetService<FilterListsDbContext>().EnsureSeeded();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue