You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

59 lines
2.6 KiB

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<string> ids)
{
try
{
List<string> tableDifferences = new List<string>();
var result = string.Empty;
var dbRoot = App.Db;
var entities = dbRoot.Queryable<ZeroEntityInfo>().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 = $"<span class='diff_bule diff_success'>{TextHandler.GetCommonText("", "This operation is not risky and can continue!!")}</span>";
}
else
{
result = string.Join("", tableDifferences).Replace("\n", "<br>");
}
result = result.Replace("<br>----", "<h3 class='diff_h3'>");
result = result.Replace("----", "</h3>");
result = result.Replace("Table:", $"{TextHandler.GetCommonText("", "Table")}:");
result = result.Replace("Add column", $"<span class='diff_bule'>{TextHandler.GetCommonText("", "Add column")}</span>");
result = result.Replace("Update column", $"<span class='diff_yellow'>{TextHandler.GetCommonText("", "Update column")}</span>");
result = result.Replace("Delete column", $"<span class='diff_red'>{TextHandler.GetCommonText("", "Delete column")}</span>");
return result;
}
catch
{
return "结构对比出现错误,请谨慎同步";
}
finally
{
CacheManager<ZeroInterfaceList>.Instance.ClearCache();
}
}
}
}