From c9628a2aefa179c1f95ed66a2ecbea72c1a8f22c Mon Sep 17 00:00:00 2001 From: collinbarrett Date: Mon, 10 Sep 2018 13:13:46 -0500 Subject: [PATCH] wip ref #308 --- .../Seed/Extensions/SeedFilterListsDbContext.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) 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