mirror of
https://github.com/collinbarrett/FilterLists.git
synced 2026-03-11 09:04:27 +00:00
parent
8586e45280
commit
22cf365c9e
1 changed files with 28 additions and 22 deletions
|
|
@ -14,35 +14,31 @@ public static class SeedFilterListsDbContext
|
|||
{
|
||||
public static void SeedOrUpdate(this FilterListsDbContext dbContext, string dataPath)
|
||||
{
|
||||
dbContext.InsertOnDuplicateKeyUpdate<Language>(dataPath);
|
||||
dbContext.InsertOnDuplicateKeyUpdate<License>(dataPath);
|
||||
dbContext.InsertOnDuplicateKeyUpdate<Maintainer>(dataPath);
|
||||
dbContext.InsertOnDuplicateKeyUpdate<Software>(dataPath);
|
||||
dbContext.InsertOnDuplicateKeyUpdate<Syntax>(dataPath);
|
||||
dbContext.InsertOnDuplicateKeyUpdate<Tag>(dataPath);
|
||||
dbContext.InsertOnDuplicateKeyUpdate<FilterList>(dataPath);
|
||||
dbContext.InsertOnDuplicateKeyUpdate<FilterListLanguage>(dataPath);
|
||||
dbContext.InsertOnDuplicateKeyUpdate<FilterListMaintainer>(dataPath);
|
||||
dbContext.InsertOnDuplicateKeyUpdate<FilterListTag>(dataPath);
|
||||
dbContext.InsertOnDuplicateKeyUpdate<Dependent>(dataPath);
|
||||
dbContext.InsertOnDuplicateKeyUpdate<Fork>(dataPath);
|
||||
dbContext.InsertOnDuplicateKeyUpdate<Merge>(dataPath);
|
||||
dbContext.InsertOnDuplicateKeyUpdate<SoftwareSyntax>(dataPath);
|
||||
dbContext.SeedOrUpdate<Language>(dataPath);
|
||||
dbContext.SeedOrUpdate<License>(dataPath);
|
||||
dbContext.SeedOrUpdate<Maintainer>(dataPath);
|
||||
dbContext.SeedOrUpdate<Software>(dataPath);
|
||||
dbContext.SeedOrUpdate<Syntax>(dataPath);
|
||||
dbContext.SeedOrUpdate<Tag>(dataPath);
|
||||
dbContext.SeedOrUpdate<FilterList>(dataPath);
|
||||
dbContext.SeedOrUpdate<FilterListLanguage>(dataPath);
|
||||
dbContext.SeedOrUpdate<FilterListMaintainer>(dataPath);
|
||||
dbContext.SeedOrUpdate<FilterListTag>(dataPath);
|
||||
dbContext.SeedOrUpdate<Dependent>(dataPath);
|
||||
dbContext.SeedOrUpdate<Fork>(dataPath);
|
||||
dbContext.SeedOrUpdate<Merge>(dataPath);
|
||||
dbContext.SeedOrUpdate<SoftwareSyntax>(dataPath);
|
||||
}
|
||||
|
||||
private static void InsertOnDuplicateKeyUpdate<TEntity>(this DbContext dbContext, string dataPath)
|
||||
private static void SeedOrUpdate<TEntity>(this DbContext dbContext, string dataPath)
|
||||
where TEntity : IBaseEntity
|
||||
{
|
||||
var entityType = dbContext.Model.FindEntityType(typeof(TEntity));
|
||||
var properties = GetPropertiesLessValueGeneratedTimestamps(entityType);
|
||||
var values = CreateValues<TEntity>(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<IProperty> 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<IProperty> properties)
|
||||
{
|
||||
var update =
|
||||
|
|
|
|||
Loading…
Reference in a new issue