2016-09-25 4 views
0

MVC 컨트롤러의 db.savechanges에 대한 이해가 부족합니다. 그래서 그 무엇인가 명백하다면, 나는 사전에 사과한다.MVC 컨트롤러가 CSV에서 가져온 데이터를 저장하지 않습니다.

MVC 컨트롤러를 사용하여 파일에서 CSV 레코드를 가져옵니다. 내가 사용하고있는 도구는 CSVHelper입니다.

코드에서 다음 작업을 수행했습니다. 1.보기에서 파일을 호출합니다. 2. 레코드 가져 오기를 위해 actionresult를 실행합니다.

csv 파일에 액세스 할 수 있으며 읽고 읽고 목록으로 변환합니다. 그리고 디버그에서 모든 레코드가 목록과 내용으로 읽혀질 수 있습니다.

public async Task<ActionResult> ImportRecords(HttpPostedFileBase file) 
    { 
     string path = null; 

     List<ReportsToRecord> RTRs = new List<ReportsToRecord>(); 

     try 
     { 
      if (file.ContentLength > 0) 
      { 
       var fileName = Path.GetFileName(file.FileName); 
       path = AppDomain.CurrentDomain.BaseDirectory + "App_Data\\uploads\\" + fileName; 
       file.SaveAs(path); 
       var csv = new CsvReader(new StreamReader(path)); 
       var RTRecordlist = csv.GetRecords<ReportsToRecord>(); 

       foreach (var r in RTRecordlist) 
       { 
        ReportsToRecord RTR = new ReportsToRecord(); 
        RTR.Id = r.Id; 
        RTR.REPORTING_ID = r.REPORTING_ID; 
        RTR.TITLE = r.TITLE; 
        RTR.NAME = r.NAME; 
        RTR.REPORTS_TO_ID = r.REPORTS_TO_ID; 
        RTR.EMPLOYEE_ID = r.EMPLOYEE_ID; 
        RTRs.Add(RTR); 
       } 
       await db.SaveChangesAsync(); 
       return RedirectToAction("Index"); 
      } 
     } 
     catch 
     { 
      ViewData["error"] = "Upload Failed"; 
     } 

     return View(); 
    } 

나는 성공적으로 읽어 모든 레코드를 보여 않는 RTRs.add 라인을 디버깅 다음은 actionresult에 대한 코드입니다. 그러나 db.savechangesasync는 이 아니며이 레코드가 저장되도록합니다.

(Entity Framework에서) 저장되는 레코드의 실제 모델 이름은 컨트롤러 이름이 ReportsToRecordsController 인 ReportsToRecord입니다.

내 코드에서 RTR 개체에 레코드가 포함되어 있지만 왜 이러한 레코드가 ReportsToRecord 모델에 저장되지 않는지 알 수 있습니까?

내가 공유 할 수있는 유일한 다른 점은 csv 파일에 키 열 'ID'도 포함되어 있다는 것입니다. 이것이 허용되는지 여부는 가져온 레코드에 대한 savechanges 작업에 대해 알지 못합니다. 대개 이러한 키는 m y MVC 응용 프로그램에서 자동으로 생성됩니다.

오류가 나타나지 않습니다. csv 파일의 레코드가 읽히지 만 데이터베이스에 다시 저장되지는 ​​않습니다.

일반적인 이야기입니다. 디버그 중에도 오류가 나타나지 않으므로 코드는 정확히 무엇을해야하는지 물을 것입니다.하지만 '예상'이 아닌 것입니다. 데이터베이스에 저장을 수행하는 것입니다. .

어떤 통찰력도 인정 될 것입니다. 나는 어리석은 실수를하고 있다고 생각한다.

+0

실행중인 데이터베이스의 유형 (Express, Standard, LocalDb)은 어디에 있습니까? 레코드가 데이터베이스에 기록되는지 나중에 확인하는 방법은 무엇입니까? 이것은 잘못된 DB를 확인하는 것과 같은 간단한 것입니까? –

+0

감사합니다. 그것의 SQL 서버. 나는 데이터베이스가 문제라고 생각하지 않는다. MVC 컨트롤러는 기존 보고서를 레코드에 가져 와서 뷰에 표시합니다. 동일한 데이터베이스에 저장하기위한 가져 오기 CSV 기능 web.config 및 기존 데이터에 언급 된 하나만 검색 가능합니다. –

답변

0

못하는 오류

난 RTRs.Add (RTR)를 변경; ~

db.ReportsToRecords.Add (RTR); 작동 했음

관련 문제