我可能錯過了一些關於我對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文件的記錄會被讀入,但不會被保存回數據庫。
它是典型的故事。因爲即使在調試中也沒有出現錯誤,代碼正在做它被要求做的事情 - 但不是它的'應該做' - 這是爲了執行保存到數據庫。
任何見解,將不勝感激。我懷疑我正在犯一些愚蠢的錯誤。
數據庫的哪種類型(Express,Standard,LocalDb)在運行,它位於何處?您如何隨後檢查是否將記錄寫入數據庫?這是否像檢查錯誤的數據庫一樣簡單? –
謝謝。它的SQL Server。我不認爲數據庫是問題。 MVC控制器將現有報告引入記錄並將其顯示在視圖上。導入csv功能旨在保存到相同的數據庫。只有web.config中提到的一個和現有數據是可檢索的 –