using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ReZero.SuperAPI { public partial class MethodApi { public object CompareDatabaseStructure(List ids) { try { List tableDifferences = new List(); var result = string.Empty; var dbRoot = App.Db; var entities = dbRoot.Queryable().In(ids.Select(it => Convert.ToInt64(it)).ToList()).ToList(); foreach (var entity in entities) { var codeFirstDb = App.GetDbTableId(entity.Id)!; var type = EntityGeneratorManager.GetTypeAsync(entity.Id).GetAwaiter().GetResult(); if (codeFirstDb.DbMaintenance.IsAnyTable(codeFirstDb.EntityMaintenance.GetTableName(type), false)) { var diff = codeFirstDb.CodeFirst.SetStringDefaultLength(255).GetDifferenceTables(type).ToDiffString(); if (diff != null && !diff.Contains("No change")) { tableDifferences.Add(diff); } } } if (tableDifferences.Count == 0) { result = $"{TextHandler.GetCommonText("此操作没有风险,可以继续!!", "This operation is not risky and can continue!!")}"; } else { result = string.Join("", tableDifferences).Replace("\n", "
"); } result = result.Replace("
----", "

"); result = result.Replace("----", "

"); result = result.Replace("Table:", $"{TextHandler.GetCommonText("表名", "Table")}:"); result = result.Replace("Add column", $"{TextHandler.GetCommonText("添加列", "Add column")}"); result = result.Replace("Update column", $"{TextHandler.GetCommonText("更新列", "Update column")}"); result = result.Replace("Delete column", $"{TextHandler.GetCommonText("删除列", "Delete column")}"); return result; } catch { return "结构对比出现错误,请谨慎同步"; } finally { CacheManager.Instance.ClearCache(); } } } }