Bladeren bron

fix: 改用id组合的hash值生成主键,防止数据一致性异常

喵你个旺呀 1 jaar geleden
bovenliggende
commit
5f4c785d47

+ 1 - 2
Admin.NET/Admin.NET.Core/SeedData/SysTenantMenuSeedData.cs

@@ -18,9 +18,8 @@ public class SysTenantMenuSeedData : ISqlSugarEntitySeedData<SysTenantMenu>
     /// <returns></returns>
     public IEnumerable<SysTenantMenu> HasData()
     {
-        var id = 1300000000101;
         var tenant = new SysTenantSeedData().HasData().First();
         var menuList = new SysMenuSeedData().HasData().ToList();
-        return menuList.Select(u => new SysTenantMenu { Id = id++, TenantId = tenant.Id, MenuId = u.Id });
+        return menuList.Select(u => new SysTenantMenu { Id = CommonUtil.GetFixedHashCode((tenant.Id + u.Id).ToString(), 1000000000000), TenantId = tenant.Id, MenuId = u.Id });
     }
 }

+ 6 - 6
Admin.NET/Admin.NET.Core/Utils/CommonUtil.cs

@@ -21,22 +21,22 @@ public static class CommonUtil
     /// 根据字符串获取固定整型哈希值
     /// </summary>
     /// <param name="str"></param>
+    /// <param name="startNumber"></param>
     /// <returns></returns>
-    public static int GetFixedHashCode(string str)
+    public static long GetFixedHashCode(string str, long startNumber=0)
     {
         if (string.IsNullOrWhiteSpace(str)) return 0;
         unchecked
         {
-            int hash1 = (5381 << 16) + 5381;
-            int hash2 = hash1;
+            long hash1 = (5381 << 16) + 5381;
+            long hash2 = hash1;
             for (int i = 0; i < str.Length; i += 2)
             {
                 hash1 = ((hash1 << 5) + hash1) ^ str[i];
-                if (i == str.Length - 1)
-                    break;
+                if (i == str.Length - 1) break;
                 hash2 = ((hash2 << 5) + hash2) ^ str[i + 1];
             }
-            return Math.Abs(hash1 + (hash2 * 1566083941));
+            return startNumber + Math.Abs(hash1 + (hash2 * 1566083941));
         }
     }