/// <summary> /// /// </summary> /// <param name="codeUnique"></param> /// <param name="databaseUniques"></param> protected virtual void MergeTableUnique(UniqueKeyInfo codeUnique, List <UniqueKeyInfo> databaseUniques) { var databaseUnique = databaseUniques.FirstOrDefault(f => f.Name == codeUnique.Name); if (databaseUnique == null) { CreateUniqueKey(codeUnique); return; } if (databaseUnique.UniqueColumns.Count != codeUnique.UniqueColumns.Count) { DropUniqueKey(databaseUnique); CreateUniqueKey(codeUnique); return; } var dbColumns = databaseUnique.UniqueColumns; var codeColumns = codeUnique.UniqueColumns; var equalColumns = codeColumns.All(c => dbColumns.Any(db => db.IsEqual(c))); if (equalColumns) { return; } DropUniqueKey(databaseUnique); CreateUniqueKey(databaseUnique); }
/// <summary> /// /// </summary> /// <param name="table"></param> /// <param name="sqlUniqueKey"></param> /// <returns></returns> private UniqueKeyInfo GetUnique(TableInfo table, SqlUniqueKeyInfo sqlUniqueKey) { var unique = new UniqueKeyInfo(); unique.Table = table; unique.Name = sqlUniqueKey.UniqueName; unique.UniqueColumns = sqlUniqueKey.SqlUniqueKeys.Select(s => table.GetColumn(s.ColumnName)).ToList(); return(unique); }
/// <summary> /// /// </summary> /// <param name="table"></param> /// <param name="sqlUniqueKey"></param> /// <returns></returns> private UniqueKeyInfo ConvertToUniqueInfo(TableInfo table, SqlUniqueKeyInfo sqlUniqueKey) { var uniqueKey = new UniqueKeyInfo(); uniqueKey.Table = table; uniqueKey.Name = sqlUniqueKey.UniqueName; uniqueKey.UniqueColumns = ConvertToUniqueColumnInfo(table, sqlUniqueKey).ToList(); return(uniqueKey); }
/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="uniqueKey"></param> protected virtual T UniqueKeyCommand <T>(UniqueKeyInfo uniqueKey) where T : class, IUniqueKeyCommand { var service = CommandServices.GetCommand <T>(); if (service == null) { return(null); } service.SetUniqueKey(uniqueKey); Commands.Add(service); return(service); }
/// <summary> /// /// </summary> /// <param name="table"></param> /// <returns></returns> private IEnumerable <UniqueKeyInfo> GetUniqueKeys(EFTableInfo table) { var indexes = table.Entity.GetIndexes().Where(w => w.IsUnique).ToList(); foreach (var index in indexes) { var uniqueInfo = new UniqueKeyInfo(); uniqueInfo.Table = table; uniqueInfo.Name = index.Relational()?.Name; uniqueInfo.UniqueColumns = index.Properties.Select(s => GetUniqueColumn(table, s)).ToList(); _migrateManager.CorrectName(uniqueInfo); yield return(uniqueInfo); } }
/// <summary> /// /// </summary> /// <param name="uniqueKey"></param> public void Correct(UniqueKeyInfo uniqueKey) { uniqueKey.Name = string.IsNullOrEmpty(uniqueKey.Name) ? "UC_" + uniqueKey.Table.Name + "_" + string.Join("_", uniqueKey.UniqueColumns.Select(s => s.Name)) : uniqueKey.Name; }
/// <summary> /// /// </summary> /// <param name="uniqueKey"></param> public void Correct(UniqueKeyInfo uniqueKey) { }
/// <summary> /// /// </summary> /// <param name="uniqueKey"></param> public virtual void SetUniqueKey(UniqueKeyInfo uniqueKey) { UniqueKey = uniqueKey; }
/// <summary> /// /// </summary> /// <param name="uniqueKey"></param> protected virtual void DropUniqueKey(UniqueKeyInfo uniqueKey) { UniqueKeyCommand <IDropUniqueKeyCommand>(uniqueKey); }
/// <summary> /// /// </summary> /// <param name="uniqueKey"></param> protected virtual void CreateUniqueKey(UniqueKeyInfo uniqueKey) { UniqueKeyCommand <ICreateUniqueKeyCommand>(uniqueKey); }
/// <summary> /// /// </summary> /// <param name="manager"></param> /// <param name="uniqueKey"></param> public static void CorrectName(this IMigrateManager manager, UniqueKeyInfo uniqueKey) { manager?.GetNamingManager()?.UniqueKeyNamingManager?.Correct(uniqueKey); }