2016-09-25 57 views
0

我可能錯過了一些關於我對MVC控制器中的db.savechanges的理解。所以如果它明顯的事情,我提前道歉。MVC控制器不保存從CSV導入的數據

我正在使用MVC控制器從文件導入CSV記錄。我正在使用的工具是CSVHelper。我的代碼如下: 1.在視圖中調用文件。 2.執行記錄導入的操作結果。

csv文件是可訪問的,並被讀取並轉換爲列表。我可以在調試中告訴所有記錄都被讀入列表及其內容。下面是的ActionResult代碼:當我調試RTRs.add線它只表示成功讀取的所有記錄

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(); 
    } 

。然而,等待db.savechangesasync確實不是導致保存這些記錄。

保存的記錄(實體框架中)的實際模型名稱是ReportsToRecord,控制器名稱爲ReportsToRecordsController。

任何人都可以在我的代碼中看到爲什麼RTRs對象確實包含記錄但這些不會保存到ReportsToRecord模型中?

我唯一可以分享的另一件事是csv文件還包含鍵列'Id'。我不知道這是否允許導入記錄上的savechanges操作。通常這些鍵是在MVC應用程序中自動生成的。

因爲它沒有錯誤出現。 csv文件的記錄會被讀入,但不會被保存回數據庫。

它是典型的故事。因爲即使在調試中也沒有出現錯誤,代碼正在做它被要求做的事情 - 但不是它的'應該做' - 這是爲了執行保存到數據庫。

任何見解,將不勝感激。我懷疑我正在犯一些愚蠢的錯誤。

+0

數據庫的哪種類型(Express,Standard,LocalDb)在運行,它位於何處?您如何隨後檢查是否將記錄寫入數據庫?這是否像檢查錯誤的數據庫一樣簡單? –

+0

謝謝。它的SQL Server。我不認爲數據庫是問題。 MVC控制器將現有報告引入記錄並將其顯示在視圖上。導入csv功能旨在保存到相同的數據庫。只有web.config中提到的一個和現有數據是可檢索的 –

回答

0

啞錯誤

我改變RTRs.Add(RTR);到

db.ReportsToRecords.Add(RTR); 它的工作原理