From 22cf365c9eeb0d3b5218af6d783d7529d67c1948 Mon Sep 17 00:00:00 2001 From: collinbarrett Date: Mon, 10 Sep 2018 10:31:58 -0500 Subject: [PATCH] minor seed refactor ref #308 --- .../Extensions/SeedFilterListsDbContext.cs | 50 +++++++++++-------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/src/FilterLists.Data/Seed/Extensions/SeedFilterListsDbContext.cs b/src/FilterLists.Data/Seed/Extensions/SeedFilterListsDbContext.cs index ed88dc51d..58aa841af 100644 --- a/src/FilterLists.Data/Seed/Extensions/SeedFilterListsDbContext.cs +++ b/src/FilterLists.Data/Seed/Extensions/SeedFilterListsDbContext.cs @@ -14,35 +14,31 @@ public static class SeedFilterListsDbContext { public static void SeedOrUpdate(this FilterListsDbContext dbContext, string dataPath) { - dbContext.InsertOnDuplicateKeyUpdate(dataPath); - dbContext.InsertOnDuplicateKeyUpdate(dataPath); - dbContext.InsertOnDuplicateKeyUpdate(dataPath); - dbContext.InsertOnDuplicateKeyUpdate(dataPath); - dbContext.InsertOnDuplicateKeyUpdate(dataPath); - dbContext.InsertOnDuplicateKeyUpdate(dataPath); - dbContext.InsertOnDuplicateKeyUpdate(dataPath); - dbContext.InsertOnDuplicateKeyUpdate(dataPath); - dbContext.InsertOnDuplicateKeyUpdate(dataPath); - dbContext.InsertOnDuplicateKeyUpdate(dataPath); - dbContext.InsertOnDuplicateKeyUpdate(dataPath); - dbContext.InsertOnDuplicateKeyUpdate(dataPath); - dbContext.InsertOnDuplicateKeyUpdate(dataPath); - dbContext.InsertOnDuplicateKeyUpdate(dataPath); + dbContext.SeedOrUpdate(dataPath); + dbContext.SeedOrUpdate(dataPath); + dbContext.SeedOrUpdate(dataPath); + dbContext.SeedOrUpdate(dataPath); + dbContext.SeedOrUpdate(dataPath); + dbContext.SeedOrUpdate(dataPath); + dbContext.SeedOrUpdate(dataPath); + dbContext.SeedOrUpdate(dataPath); + dbContext.SeedOrUpdate(dataPath); + dbContext.SeedOrUpdate(dataPath); + dbContext.SeedOrUpdate(dataPath); + dbContext.SeedOrUpdate(dataPath); + dbContext.SeedOrUpdate(dataPath); + dbContext.SeedOrUpdate(dataPath); } - private static void InsertOnDuplicateKeyUpdate(this DbContext dbContext, string dataPath) + private static void SeedOrUpdate(this DbContext dbContext, string dataPath) where TEntity : IBaseEntity { var entityType = dbContext.Model.FindEntityType(typeof(TEntity)); var properties = GetPropertiesLessValueGeneratedTimestamps(entityType); var values = CreateValues(properties, dataPath); - if (values == "") return; - var columns = string.Join(", ", properties.Select(x => x.Name)); - var updates = CreateUpdates(properties); - var rawSqlString = "INSERT INTO " + entityType.Relational().TableName + " (" + columns + ") VALUES " + - values + " ON DUPLICATE KEY UPDATE " + updates; - dbContext.Database.ExecuteSqlCommand(rawSqlString); - dbContext.SaveChanges(); + if (values == "") + return; + InsertOnDuplicateKeyUpdate(dbContext, properties, entityType, values); } //TODO: get seed properties dynamically from JSON @@ -90,6 +86,16 @@ private static object FormatDataForMySql(IProperty property, object value) return value; } + private static void InsertOnDuplicateKeyUpdate(DbContext dbContext, IReadOnlyCollection properties, + IEntityType entityType, string values) + { + var columns = string.Join(", ", properties.Select(x => x.Name)); + var updates = CreateUpdates(properties); + var rawSqlString = "INSERT INTO " + entityType.Relational().TableName + " (" + columns + ") VALUES " + + values + " ON DUPLICATE KEY UPDATE " + updates; + dbContext.Database.ExecuteSqlCommand(rawSqlString); + } + private static string CreateUpdates(IReadOnlyCollection properties) { var update =