0
0
Эх сурвалжийг харах

初始化数据时检查该表是否有自增长列

zhontai 4 жил өмнө
parent
commit
e8bad6e060

+ 35 - 5
Admin.Core/Db/DbHelper.cs

@@ -129,6 +129,27 @@ namespace Admin.Core.Db
             Console.WriteLine($" {(msg.NotNull() ? msg : $"sync {dbType} structure")} succeed");
         }
 
+        /// <summary>
+        /// 检查实体属性是否为自增长
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <returns></returns>
+        private static bool CheckIdentity<T>() where T : class
+        {
+            var isIdentity = false;
+            var properties = typeof(T).GetProperties();
+            foreach (var property in properties)
+            {
+                if (property.GetCustomAttributes(typeof(ColumnAttribute), false).FirstOrDefault() is ColumnAttribute columnAttribute && columnAttribute.IsIdentity)
+                {
+                    isIdentity = true;
+                    break;
+                }
+            }
+
+            return isIdentity;
+        }
+
         /// <summary>
         /// 初始化数据表数据
         /// </summary>
@@ -161,16 +182,25 @@ namespace Admin.Core.Db
                             insert = insert.WithTransaction(tran);
                         }
 
-                        if(dbConfig.Type == DataType.SqlServer)
+                        var isIdentity = CheckIdentity<T>();
+                        if (isIdentity)
                         {
-                            var insrtSql = insert.AppendData(data).InsertIdentity().ToSql();
-                            await db.Ado.ExecuteNonQueryAsync($"SET IDENTITY_INSERT {tableName} ON\n {insrtSql} \nSET IDENTITY_INSERT {tableName} OFF");
+                            if (dbConfig.Type == DataType.SqlServer)
+                            {
+
+                                var insrtSql = insert.AppendData(data).InsertIdentity().ToSql();
+                                await db.Ado.ExecuteNonQueryAsync($"SET IDENTITY_INSERT {tableName} ON\n {insrtSql} \nSET IDENTITY_INSERT {tableName} OFF");
+                            }
+                            else
+                            {
+                                await insert.AppendData(data).InsertIdentity().ExecuteAffrowsAsync();
+                            }
                         }
                         else
                         {
-                            await insert.AppendData(data).InsertIdentity().ExecuteAffrowsAsync();
+                            await insert.AppendData(data).ExecuteAffrowsAsync();
                         }
-                        
+
                         Console.WriteLine($" table: {tableName} sync data succeed");
                     }
                     else