diff --git a/src/FilterLists.Data/Seed/Extensions/SeedFilterListsDbContext.cs b/src/FilterLists.Data/Seed/Extensions/SeedFilterListsDbContext.cs index 248ae0e74..364ec9fa1 100644 --- a/src/FilterLists.Data/Seed/Extensions/SeedFilterListsDbContext.cs +++ b/src/FilterLists.Data/Seed/Extensions/SeedFilterListsDbContext.cs @@ -30,11 +30,13 @@ public static void SeedOrUpdate(this FilterListsDbContext dbContext, string data dbContext.SeedOrUpdate(dataPath); } - private static void SeedOrUpdate(this DbContext dbContext, string dataPath) where TEntity : IBaseEntity + private static void SeedOrUpdate(this DbContext dbContext, string dataPath) + where TEntity : class, IBaseEntity { var entityType = dbContext.Model.FindEntityType(typeof(TEntity)); var properties = GetPropertiesLessValueGeneratedTimestamps(entityType); var seedRows = GetSeedRows(dataPath); + Delete(dbContext, seedRows); InsertOnDuplicateKeyUpdate(dbContext, properties, entityType, seedRows); } @@ -57,6 +59,17 @@ private static List GetSeedRows(string dataPath) where TEntity } } + private static void Delete(DbContext dbContext, IEnumerable seedRows) + where TEntity : class, IBaseEntity + { + var idProperties = typeof(TEntity).GetProperties().Where(p => p.Name.Contains("Id")); + var toRemove = dbContext.Set() + .Select(s => idProperties) + .Except(seedRows.Select(s => idProperties)); + dbContext.RemoveRange(toRemove); + dbContext.SaveChanges(); + } + private static void InsertOnDuplicateKeyUpdate(DbContext dbContext, IReadOnlyCollection properties, IEntityType entityType, IEnumerable seedRows) where TEntity : IBaseEntity