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.
 
 
 
 

74 lines
3.3 KiB

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();
}
}
}