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.
75 lines
3.3 KiB
75 lines
3.3 KiB
3 weeks ago
|
using SqlSugar;
|
||
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Text;
|
||
|
|
||
|
namespace ReZero.SuperAPI
|
||
|
{
|
||
|
public partial class MethodApi
|
||
|
{
|
||
|
private long _targetDb;
|
||
|
public bool SynchronousData(long originalDb, long targetDb, bool? isBak)
|
||
|
{
|
||
|
_targetDb = targetDb;
|
||
|
var odb = App.Db;
|
||
|
var tdb = App.GetDbById(targetDb);
|
||
|
if (!tdb!.Ado.IsValidConnection())
|
||
|
{
|
||
|
new Exception(TextHandler.GetCommonText("目标数据库连接失败", "The target database connection failed"));
|
||
|
}
|
||
|
tdb!.CurrentConnectionConfig.MoreSettings=odb.CurrentConnectionConfig.MoreSettings;
|
||
|
tdb!.CurrentConnectionConfig.ConfigureExternalServices = odb.CurrentConnectionConfig.ConfigureExternalServices;
|
||
|
try
|
||
|
{
|
||
|
tdb!.CodeFirst.InitTables(typeof(ZeroEntityInfo),
|
||
|
typeof(ZeroEntityColumnInfo),
|
||
|
typeof(ZeroInterfaceCategory),
|
||
|
typeof(ZeroInterfaceList),
|
||
|
typeof(ZeroDatabaseInfo),
|
||
|
typeof(ZeroUserInfo));
|
||
|
tdb!.BeginTran();
|
||
|
var randomNum =Convert.ToInt32( DateTime.Now.ToString("HHmmss"));
|
||
|
SynchronousTable<ZeroEntityInfo>(odb, tdb, isBak, randomNum);
|
||
|
SynchronousTable<ZeroEntityColumnInfo>(odb, tdb, isBak, randomNum);
|
||
|
SynchronousTable<ZeroInterfaceCategory>(odb, tdb, isBak, randomNum);
|
||
|
SynchronousTable<ZeroInterfaceList>(odb, tdb, isBak, randomNum);
|
||
|
SynchronousTable<ZeroDatabaseInfo>(odb, tdb, isBak, randomNum);
|
||
|
SynchronousTable<ZeroUserInfo>(odb, tdb, isBak, randomNum);
|
||
|
var tIno = odb.Queryable<ZeroDatabaseInfo>().First(it => it.Id == targetDb);
|
||
|
tdb.Updateable<ZeroDatabaseInfo>()
|
||
|
.SetColumns(it => new ZeroDatabaseInfo
|
||
|
{
|
||
|
DbType = tIno.DbType,
|
||
|
Connection = tIno.Connection,
|
||
|
EasyDescription = tIno.EasyDescription,
|
||
|
})
|
||
|
.Where(it => it.Id == 1).ExecuteCommand();
|
||
|
tdb.Deleteable<ZeroDatabaseInfo>().Where(it => it.Id == targetDb).ExecuteCommand();
|
||
|
tdb.CommitTran();
|
||
|
}
|
||
|
catch (Exception)
|
||
|
{
|
||
|
tdb!.CommitTran();
|
||
|
throw;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
private void SynchronousTable<T>(ISqlSugarClient? odb, SqlSugar.SqlSugarClient? tdb, bool? isBak, int randomNum) where T : class, new()
|
||
|
{
|
||
|
|
||
|
var tTableName = tdb!.EntityMaintenance.GetTableName<T>();
|
||
|
var newtTableName = tTableName.ToLower().Replace("zero_","_bak_") + randomNum;
|
||
|
var oldList = odb!.Queryable<T>().ToList();
|
||
|
if (isBak == true)
|
||
|
{
|
||
|
tdb!.CodeFirst.As<T>(newtTableName).InitTables<T>();
|
||
|
tdb.DbMaintenance.TruncateTable(newtTableName);
|
||
|
tdb.Insertable(oldList).AS(newtTableName).ExecuteCommand();
|
||
|
}
|
||
|
tdb.DbMaintenance.TruncateTable<T>();
|
||
|
tdb.Insertable(oldList).ExecuteCommand();
|
||
|
}
|
||
|
}
|
||
|
}
|