黄贺彬 6 年之前
父节点
当前提交
a81eac628c

+ 85 - 33
TEAMModelOS.SDK/Module/AzureTable/Implements/AzureTableDBRepository.cs

@@ -373,14 +373,26 @@ namespace TEAMModelOS.SDK.Module.AzureTable.Implements
                 foreach (string key in dict.Keys)
                 {
                     List<T> values = dict[key];
-                    Parallel.ForEach(Partitioner.Create(0, values.Count, 100),
-                      async range =>
-                      {
-                          TableBatchOperation batchOperation = new TableBatchOperation();
-                          for (Int32 i = range.Item1; i < range.Item2; i++)
-                              batchOperation.Insert(values[i]);
-                          result = await tableClient.GetTableReference(TableName).ExecuteBatchAsync(batchOperation);
-                      });
+                    //Parallel.ForEach(Partitioner.Create(0, values.Count, 100),
+                    //  async range =>
+                    //  {
+                    //      TableBatchOperation batchOperation = new TableBatchOperation();
+                    //      for (Int32 i = range.Item1; i < range.Item2; i++)
+                    //          batchOperation.Insert(values[i]);
+                    //      result = await tableClient.GetTableReference(TableName).ExecuteBatchAsync(batchOperation);
+                    //  });
+                    int pageSize = 100;
+                    int pages = (int)Math.Ceiling((double)values.Count / pageSize);
+                    for (int i = 0; i < pages; i++)
+                    {
+                        List<T> lists = values.Skip((i) * pageSize).Take(pageSize).ToList();
+                        TableBatchOperation batchOperation = new TableBatchOperation();
+                        for (int j = 0; j < lists.Count; j++)
+                        {
+                            batchOperation.Insert(lists[j]);
+                        }
+                        result = await tableClient.GetTableReference(TableName).ExecuteBatchAsync(batchOperation);
+                    }
                 }
             }
             return entitys;
@@ -409,14 +421,26 @@ namespace TEAMModelOS.SDK.Module.AzureTable.Implements
                 foreach (string key in dict.Keys)
                 {
                     List<T> values = dict[key];
-                    Parallel.ForEach(Partitioner.Create(0, values.Count, 100),
-                      async range =>
-                      {
-                          TableBatchOperation batchOperation = new TableBatchOperation();
-                          for (Int32 i = range.Item1; i < range.Item2; i++)
-                              batchOperation.Replace(values[i]);
-                          result = await tableClient.GetTableReference(TableName).ExecuteBatchAsync(batchOperation);
-                      });
+                    //Parallel.ForEach(Partitioner.Create(0, values.Count, 100),
+                    //  async range =>
+                    //  {
+                    //      TableBatchOperation batchOperation = new TableBatchOperation();
+                    //      for (Int32 i = range.Item1; i < range.Item2; i++)
+                    //          batchOperation.Replace(values[i]);
+                    //      result = await tableClient.GetTableReference(TableName).ExecuteBatchAsync(batchOperation);
+                    //  });
+                    int pageSize = 100;
+                    int pages = (int)Math.Ceiling((double)values.Count / pageSize);
+                    for (int i = 0; i < pages; i++)
+                    {
+                        List<T> lists = values.Skip((i) * pageSize).Take(pageSize).ToList();
+                        TableBatchOperation batchOperation = new TableBatchOperation();
+                        for (int j = 0; j < lists.Count; j++)
+                        {
+                            batchOperation.Replace(lists[j]);
+                        }
+                        result = await tableClient.GetTableReference(TableName).ExecuteBatchAsync(batchOperation);
+                    }
                 }
             }
             return entitys;
@@ -445,18 +469,34 @@ namespace TEAMModelOS.SDK.Module.AzureTable.Implements
                 foreach (string key in dict.Keys)
                 {
                     List<T> values = dict[key];
-                    Parallel.ForEach(Partitioner.Create(0, values.Count, 100),
-                      async range =>
-                      {
-                          TableBatchOperation batchOperation = new TableBatchOperation();
-                          for (Int32 i = range.Item1; i < range.Item2; i++)
-                              batchOperation.InsertOrReplace(values[i]);
-                          result = await tableClient.GetTableReference(TableName).ExecuteBatchAsync(batchOperation);
-                      });
+                    //Parallel.ForEach(Partitioner.Create(0, values.Count, 50),
+                    //  async range =>
+                    //  {
+                    //      TableBatchOperation batchOperation = new TableBatchOperation();
+                    //      for (Int32 i = range.Item1; i < range.Item2; i++)
+                    //          batchOperation.InsertOrReplace(values[i]);
+                    //      result = await tableClient.GetTableReference(TableName).ExecuteBatchAsync(batchOperation);
+                    //  });
+                  
+                    int pageSize = 100; 
+                    int pages = (int)Math.Ceiling((double)values.Count/ pageSize);
+                    for (int i= 0; i < pages; i++) {
+                        List<T> lists=  values.Skip((i) * pageSize).Take(pageSize).ToList();
+                        TableBatchOperation batchOperation = new TableBatchOperation();
+                        for (int j = 0; j < lists.Count; j++)
+                        {
+                            batchOperation.InsertOrReplace(lists[j]);
+                        }
+                        result = await tableClient.GetTableReference(TableName).ExecuteBatchAsync(batchOperation);
+                    }
                 }
             }
             return entitys;
         }
+
+
+
+
         public async Task<List<T>> DeleteAll<T>(List<T> entitys) where T : TableEntity, new()
         {
             if (entitys.IsEmpty())
@@ -480,14 +520,27 @@ namespace TEAMModelOS.SDK.Module.AzureTable.Implements
                 foreach (string key in dict.Keys)
                 {
                     List<T> values = dict[key];
-                    Parallel.ForEach(Partitioner.Create(0, values.Count, 100),
-                      async range =>
-                      {
-                          TableBatchOperation batchOperation = new TableBatchOperation();
-                          for (Int32 i = range.Item1; i < range.Item2; i++)
-                              batchOperation.Delete(values[i]);
-                          result = await tableClient.GetTableReference(TableName).ExecuteBatchAsync(batchOperation);
-                      });
+                    //Parallel.ForEach(Partitioner.Create(0, values.Count, 100),
+                    //  async range =>
+                    //  {
+                    //      TableBatchOperation batchOperation = new TableBatchOperation();
+                    //      for (Int32 i = range.Item1; i < range.Item2; i++)
+                    //          batchOperation.Delete(values[i]);
+                    //      result = await tableClient.GetTableReference(TableName).ExecuteBatchAsync(batchOperation);
+                    //  });
+
+                    int pageSize = 100;
+                    int pages = (int)Math.Ceiling((double)values.Count / pageSize);
+                    for (int i = 0; i < pages; i++)
+                    {
+                        List<T> lists = values.Skip((i) * pageSize).Take(pageSize).ToList();
+                        TableBatchOperation batchOperation = new TableBatchOperation();
+                        for (int j = 0; j < lists.Count; j++)
+                        {
+                            batchOperation.Delete(lists[j]);
+                        }
+                        result = await tableClient.GetTableReference(TableName).ExecuteBatchAsync(batchOperation);
+                    }
                 }
             }
             return entitys;
@@ -595,6 +648,5 @@ namespace TEAMModelOS.SDK.Module.AzureTable.Implements
             };
             return pagination;
         }
-
     }
 }

+ 1 - 1
TEAMModelOS/SeedData/SeedDataService.cs

@@ -28,7 +28,7 @@ namespace TEAMModelOS.SeedData
             SeedRootAdmin();
             SeedRole();
             SeedSchool();
-             SeedTextBook();
+            SeedTextBook();
             //SeedArea();
         }
 

+ 1 - 1
TEAMModelOS/appsettings.Development.json

@@ -9,7 +9,7 @@
   "AllowedHosts": "*",
   "Azure": {
     "Table": {
-      "ConnectionString": "AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;DefaultEndpointsProtocol=http;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;",
+      "ConnectionString": "AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;DefaultEndpointsProtocol=http;BlobEndpoint=http://192.168.8.133:10000/devstoreaccount1;QueueEndpoint=http://192.168.8.133:10001/devstoreaccount1;TableEndpoint=http://192.168.8.133:10002/devstoreaccount1;",
       "AzureTableDialect": ""
     },
     "Blob": {