我有一個MVC3視圖,它通過Ajax將一組輸入值回傳給我的控制器。然後,我的控制器在我的上下文中創建一個新的FieldTripRoute對象,並嘗試將其插入到數據庫中。Linq到SQL行未找到或更改插入操作異常在MVC3中操作Ajax回發
我只是無法弄清楚發生了什麼事情。我已經三重檢查了我的Designer模式和我的數據庫模式,並且它們完美匹配。所以它不可能是一個不存在或在一個區域可空的列的正常問題,而不是另一個區域的空。但是,每次我嘗試提交更改時,都會收到「未找到或更改行」異常。
異常堆棧跟蹤看起來是這樣的:
at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges()
at ManageMAT.Controllers.FieldTripController.RouteAdd(Int32 id, FormCollection collection)
這是被呼叫從控制器添加新幹線對象的代碼:
[HttpPost]
public ActionResult RouteAdd(int id, FormCollection collection)
{
FieldTrip trip = context.FieldTrips.Single(ft => ft.ID == id);
if (trip == null) return Json(new { success = false, message = "Field trip not found." }); ;
try
{
FieldTripRoute tripRoute = new FieldTripRoute();
tripRoute.FieldTripID = trip.ID;
tripRoute.Date = DateTime.Parse(collection["Date"]);
tripRoute.ArrivalTime = DateTime.Parse(collection["ArrivalTime"] + " " + DateTime.Now.ToShortDateString());
tripRoute.DepartureTime = DateTime.Parse(collection["DepartureTime"] + " " + DateTime.Now.ToShortDateString());
tripRoute.Destination = collection["Destination"];
tripRoute.PickupLocation = collection["PickupLocation"];
tripRoute.RouteID = Convert.ToInt32(collection["RouteID"]);
context.FieldTripRoutes.InsertOnSubmit(tripRoute);
context.SubmitChanges();
return Json(new { success = true, message = "Success!" });
}
catch (Exception ex)
{
return Json(new { success = false, message = ex.Message });
}
}
這裏是我的設計師和數據庫表列:
我也試圖在上下文對象和SQL事件探查器中可用的日誌記錄中查看它正在輸出的SQL,但它在連接到數據庫服務器之前似乎失敗了。
編輯:忘了添加一個其他的東西,當我在添加動作開始時創建新的FieldTripRoute對象時,我注意到它沒有從數據庫標識系列中檢索正確的ID。也許這是相關的?
我也試過在設計器中的每個字段上設置更新檢查從不只是看它是不是一種奇怪的併發衝突發生,但我仍然收到相同的錯誤。
我真的對可能導致此問題的原因感到茫然。任何想法都表示讚賞。
是的,這是我忘記提及的另一件事,我創建一個新的對象後檢查ID值,我得到0回來。正確的ID應該是92我相信基於當前的表身份值。 此外,我試圖檢查SQL,但它甚至在生成它之前拋出異常。據我所知,Linq內部的某些東西甚至在它碰到數據庫之前就拋出它。當我在數據庫上運行分析器時,它在拋出異常之前甚至沒有觸及它。 – Philter 2012-02-08 22:12:41
我添加了更多說明。 – usr 2012-02-08 22:23:23
ID值應該只在SubmitChanges上更新,順便說一句。這個是正常的。也許你沒有在L2S中配置ID字段更新模式爲「自動同步」? – usr 2012-02-08 22:25:43