From 4dc8849b311be8624f1aaa899b861afc0e2e8883 Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Tue, 12 May 2026 13:36:39 +0700 Subject: [PATCH] fix method --- Controllers/RecruitController.cs | 35 ++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/Controllers/RecruitController.cs b/Controllers/RecruitController.cs index 39fd3c9..73b39df 100644 --- a/Controllers/RecruitController.cs +++ b/Controllers/RecruitController.cs @@ -737,6 +737,7 @@ namespace BMA.EHR.Recruit.Service.Controllers }; await _context.RecruitImports.AddAsync(imported); + await _context.SaveChangesAsync(); // Save import first to get Id // import datafile System.IO.File.WriteAllBytes(importFile, fileContent); @@ -869,8 +870,8 @@ namespace BMA.EHR.Recruit.Service.Controllers { _context.SaveChanges(); _context.ChangeTracker.Clear(); - // Re-attach the import entity after clearing the tracker - _context.RecruitImports.Attach(imported); + // Re-attach the import entity as Unchanged after clearing the tracker + _context.Entry(imported).State = EntityState.Unchanged; batchCount = 0; } @@ -1101,6 +1102,8 @@ namespace BMA.EHR.Recruit.Service.Controllers var cols = workSheet.GetHeaderColumns(); int row = 2; + int batchCount = 0; + const int batchSize = 500; while (row <= totalRows) { @@ -1247,13 +1250,23 @@ namespace BMA.EHR.Recruit.Service.Controllers //imported.Recruits.Add(r); row++; + batchCount++; + + // Batch save to prevent OutOfMemoryException on large imports + if (batchCount >= batchSize) + { + _context.SaveChanges(); + _context.ChangeTracker.Clear(); + // Re-attach the import entity as Unchanged after clearing the tracker + _context.Entry(imported).State = EntityState.Unchanged; + batchCount = 0; + } } } } - // finally save to database - + // Save remaining records in the last batch _context.SaveChanges(); return Success(); @@ -1605,6 +1618,8 @@ namespace BMA.EHR.Recruit.Service.Controllers { //var totalRows = workSheet.Dimension.Rows; int row = 7; // เริ่มที่ row 7 ตามตัวอย่างไฟล์ + int batchCount = 0; + const int batchSize = 500; var endRow = workSheet.Dimension.End.Row; // แถวสุดท้ายที่มีข้อมูล while (row <= endRow) @@ -1623,13 +1638,25 @@ namespace BMA.EHR.Recruit.Service.Controllers existingScore.LastUpdatedAt = DateTime.Now; existingScore.LastUpdateUserId = UserId ?? ""; existingScore.LastUpdateFullName = FullName ?? "System Administrator"; + batchCount++; } row++; + + // Batch save to prevent OutOfMemoryException on large imports + if (batchCount >= batchSize) + { + await _context.SaveChangesAsync(); + _context.ChangeTracker.Clear(); + // Re-attach the import entity as Unchanged after clearing the tracker + _context.Entry(rec_import).State = EntityState.Unchanged; + batchCount = 0; + } } } } + // Save remaining records in the last batch await _context.SaveChangesAsync(); return Success();