ref #308
This commit is contained in:
collinbarrett 2018-09-10 13:13:46 -05:00
parent d00f3e6a20
commit c9628a2aef

View file

@ -30,11 +30,13 @@ public static void SeedOrUpdate(this FilterListsDbContext dbContext, string data
dbContext.SeedOrUpdate<SoftwareSyntax>(dataPath);
}
private static void SeedOrUpdate<TEntity>(this DbContext dbContext, string dataPath) where TEntity : IBaseEntity
private static void SeedOrUpdate<TEntity>(this DbContext dbContext, string dataPath)
where TEntity : class, IBaseEntity
{
var entityType = dbContext.Model.FindEntityType(typeof(TEntity));
var properties = GetPropertiesLessValueGeneratedTimestamps(entityType);
var seedRows = GetSeedRows<TEntity>(dataPath);
Delete(dbContext, seedRows);
InsertOnDuplicateKeyUpdate(dbContext, properties, entityType, seedRows);
}
@ -57,6 +59,17 @@ private static List<TEntity> GetSeedRows<TEntity>(string dataPath) where TEntity
}
}
private static void Delete<TEntity>(DbContext dbContext, IEnumerable<TEntity> seedRows)
where TEntity : class, IBaseEntity
{
var idProperties = typeof(TEntity).GetProperties().Where(p => p.Name.Contains("Id"));
var toRemove = dbContext.Set<TEntity>()
.Select(s => idProperties)
.Except(seedRows.Select(s => idProperties));
dbContext.RemoveRange(toRemove);
dbContext.SaveChanges();
}
private static void InsertOnDuplicateKeyUpdate<TEntity>(DbContext dbContext,
IReadOnlyCollection<IProperty> properties, IEntityType entityType, IEnumerable<TEntity> seedRows)
where TEntity : IBaseEntity