/// <summary> /// 检查指定实体的Hash值,决定是否需要进行数据库同步 /// </summary> /// <returns>同步返回true,不同步返回false</returns> public static bool CheckSyncByHash(this IEnumerable <IEntityHash> entityHashes, IServiceProvider provider, ILogger logger) { IEntityHash[] hashes = entityHashes as IEntityHash[] ?? entityHashes.ToArray(); if (hashes.Length == 0) { return(false); } string hash = hashes.Select(m => m.GetHash()).ExpandAndToString().ToMd5Hash(); IKeyValueStore store = provider.GetService <IKeyValueStore>(); string entityType = hashes[0].GetType().FullName; string key = $"OSharp.Initialize.SyncToDatabaseHash-{entityType}"; IKeyValue keyValue = store.GetByKey(key); if (keyValue != null && keyValue.Value?.ToString() == hash) { logger.LogInformation($"{hashes.Length}条基础数据“{entityType}”的内容签名 {hash} 与上次相同,取消数据库同步"); return(false); } store.CreateOrUpdate(key, hash).GetAwaiter().GetResult(); logger.LogInformation($"{hashes.Length}条基础数据“{entityType}”的内容签名 {hash} 与上次 {keyValue?.Value} 不同,将进行数据库同步"); return(true); }