Как получить количество строк csv в CsvHelper

Я работаю с CsvHelper для моего приложения Asp.net Core 2.2 MVC EF. Я могу прочитать данные и вставить их в свою базу данных после загрузки файла csv с разделителями-запятыми. но когда в CSV-файле много строк, он вставляет только первую строку, и даже если в CSV-файле 10 строк. ниже мой код контроллера: я надеюсь, что вы можете мне помочь. ТИА.

[HttpPost("textCsv")]
        public async Task<IActionResult> textCsv([Bind("CompanyCode,ProductCode,TransactionDate,TransactionTime,OriginatingBranch,CustomerNumber,TransactionOrigin,TypeOfPayment,CheckNumber,TransactionAmount,CustomerName,UserName,UserIP,UserDate")]BdoToDb bdoToDb, List<IFormFile> files)
        {
            UserDetails();
            long size = files.Sum(f => f.Length);

            // full path to file in temp location
            var filepath = Path.GetTempFileName();
            var users = new List<BDOCsv>();
            foreach (var formFile in files)
            {
                if (formFile.Length > 0)
                {
                    using (var stream = formFile.OpenReadStream())
                    {
                        try { users = stream.CsvToList<BDOCsv>(); }
                        catch (Exception ex) { return BadRequest(ex.Message); }
                    }
                }
            }
            int i = 0;
            while (i < users.Count)
            {
                ViewBag.CompanyCode = users[i].CompanyCode;
                ViewBag.ProductCode = users[i].ProductCode;
                ViewBag.TransactionDate = users[i].TransactionDate;
                ViewBag.TransactionTime = users[i].TransactionTime;
                ViewBag.OriginatingBranch = users[i].OriginatingBranch;
                ViewBag.CustomerNumber = users[i].CustomerNumber;
                ViewBag.TransactionOrigin = users[i].TransactionOrigin;
                ViewBag.TypeOfPayment = users[i].TypeOfPayment;
                ViewBag.CheckNumber = users[i].CheckNumber;
                ViewBag.TransactionAmount = users[i].TransactionAmount;
                ViewBag.CustomerName = users[i].CustomerName;

                bdoToDb.CompanyCode = ViewBag.CompanyCode;
                bdoToDb.ProductCode = ViewBag.ProductCode;
                bdoToDb.TransactionDate = ViewBag.TransactionDate;
                bdoToDb.TransactionTime = ViewBag.TransactionTime;
                bdoToDb.OriginatingBranch = ViewBag.OriginatingBranch;
                bdoToDb.CustomerNumber = ViewBag.CustomerNumber;
                bdoToDb.TransactionOrigin = ViewBag.TransactionOrigin;
                bdoToDb.TypeOfPayment = ViewBag.TypeOfPayment;
                bdoToDb.CheckNumber = ViewBag.CheckNumber;
                bdoToDb.TransactionAmount = ViewBag.TransactionAmount;
                bdoToDb.CustomerName = ViewBag.CustomerName;
                bdoToDb.UserName = ViewBag.DisplayName;
                bdoToDb.UserIP = HttpContext.Connection.RemoteIpAddress.ToString();
                bdoToDb.UserDate = DateTime.Now.ToString("MM/dd/yyyy");
                i++;
                _context.Add(bdoToDb);
                await _context.SaveChangesAsync();
            }
            //return View();
            return RedirectToAction(nameof(Index));
        }


person Jose Baleros Jr    schedule 30.09.2019    source источник


Ответы (1)


Линия

try { users = stream.CsvToList<BDOCsv>(); }

перезаписывает список users каждый раз, когда читает файл. Итак, когда вы делаете

while (i < users.Count)

список users содержит только последний прочитанный пользовательский файл.

Попробуйте изменить его на

try { users.AddRange(stream.CsvToList<BDOCsv>(); }

Это добавит новых пользователей в существующий список, а не заменит их.

person Simply Ged    schedule 30.09.2019
comment
Привет, сэр @Simple Ged, спасибо за этот ответ, теперь он получает количество строк, но я столкнулся с другой ошибкой в ​​​​последней части кода i++; _context.Add(bdoToDb); await _context.SaveChangesAsync(); после первого цикла возникает ошибка, в которой говорится, что вставка идентификатора отключена. - person Jose Baleros Jr; 30.09.2019
comment
@josebalerosjr Не могли бы вы создать новый вопрос относительно вашей новой проблемы. Убедитесь, что вы создали минимально воспроизводимый пример для своей проблемы, а не публикуете весь код (вы можете обнаружить, когда создайте минимально воспроизводимый пример, вы сами решаете проблему :-)) - person Simply Ged; 30.09.2019