에서 '개체를 여러 번 처리하지 마십시오'라는 메시지가 표시됩니다. 이에 관한 많은 게시물을 읽었으니이 점을 이해하는 데 도움이 필요합니다.csv 가져 오기 방법
CodeAnalysis는이 방법이 객체를 두 번 폐기하고 있다고 말합니다. 사실, 메서드에있는 두 객체에 대해이 사실을 경고합니다. 당신이 using (var reader = new StreamReader(file.InputStream))
를 사용할 필요가 없습니다 이미 독자 객체를 처분
public void SaveCsvData(HttpPostedFileBase file, int vendorId)
{
var listCsvImport = new List<CsvImport>();
try
{
using (var reader = new StreamReader(file.InputStream))
using (var csvReader = new CsvHelper.CsvReader(reader))
{
int count = 0;
while (csvReader.Read())
{
...<snip>...
listCsvImport.Add(record);
}
_db.CsvImports.AddRange(listCsvImport);
_db.SaveChanges();
}
...<snip>...
}
catch (CsvBadDataException ex)
{
log.Error("Invalid data in the CSV file, terminating process...");
throw;
}
catch (Exception ex)
{
log.Error("Csv import failed, no data was saved.", ex);
throw;
}
}
감사
'(var reader ... '를 사용하여'{...}'이 누락 되었습니까? – DavidG
이것은 아마도 CsvReader가 독자를 삭제하므로 2 개의 using 문이 필요하지 않기 때문일 수 있습니다. 당신이 게시 한 코드와는 다른 실제 코드를 컴파일한다고 가정합니다. –
@DavidG 아니요, 네스트를 중첩 시키려면 스택 문을 사용하여 스택하는 것이 좋습니다. 문제가 발생하면 모두 순서대로 처리합니다. 그들은 –