该方法用于两个库直接同步,如一个库可把第二个IFeesql条件删除.
IFreeSql fsql_select = new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.SqlServer, @"Data Source={}")
.UseAutoSyncStructure(false) //自动同步实体结构到数据库,FreeSql不会扫描程序集,只有CRUD时才会生成表。 原库
.Build(); //请务必定义成 Singleton 单例模式
IFreeSql fsql_In = new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.SqlServer, @"Data Source={}")
.UseAutoSyncStructure(false) //自动同步实体结构到数据库,FreeSql不会扫描程序集,只有CRUD时才会生成表。 同步库
.Build(); //请务必定义成 Singleton 单例模式
方法:
/// <summary>
/// Freesql扩展数据同步
/// 删除后插入
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="freeSqlSelect"></param>
/// <param name="freeSqlInsert"></param>
/// <param name="fieldName"></param>
/// <param name="fieldData"></param>
/// <returns></returns>
public static bool DeleteToInsert<T>(this IFreeSql freeSqlSelect, IFreeSql freeSqlInsert, List<T> data, string fieldName = "", string fieldData = "")
where T : class
{
try
{
if (data.Count <= 0 || string.IsNullOrEmpty(fieldData) || fieldData == null) return false;
var lambda1 = LambdaParser.Parse<Func<T, bool>>($"s => s.{fieldName} == \"{fieldData}\"");
int delerows = freeSqlInsert.Delete<T>()
.WhereIf(fieldName != "", lambda1)
.ExecuteAffrows();
if (delerows == 0) return false;
if (delerows > 50)
{
_logger.Log(LogLevel.Warn, $"本次同步表{typeof(T)}--删除条数:{delerows},删除条件{fieldName}:{fieldData}");
}
else
{
_logger.Log(LogLevel.Info, $"本次同步表{typeof(T)}--删除条数:{delerows},删除条件{fieldName}:{fieldData}");
}
int insertrows = freeSqlInsert.Insert<T>(data).ExecuteAffrows();
if (insertrows == 0) return false;
if (insertrows > 50)
{
_logger.Log(LogLevel.Warn, $"本次同步表{typeof(T)}--插入条数:{insertrows}");
}
else
{
_logger.Log(LogLevel.Warn, $"本次同步表{typeof(T)}--插入条数:{insertrows}");
}
return true;
}
catch (Exception ex)
{
_logger.Error("Freesql扩展操作异常:", ex.Message, "数据:", data);
return false;
}
}
调用实例
fsql_select.DeleteToInsert(fsql_In, CurdType.Delete, form_list, "pre_entry_id", form_list[0].pre_entry_id);