begin adding seed

This commit is contained in:
Collin Barrett 2018-01-17 17:44:28 -06:00
parent 9c87c46179
commit bb1823ac4c
3 changed files with 4986 additions and 0 deletions

View 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();
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -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();
}
}
}
}