我正在使用存儲的過程來執行插入和(邏輯)刪除數據庫中保留所有歷史記錄。應用程序的更新是不允許的。ASP.NET MVC和EF引用更新存儲過程時做插入
我試圖插入一個新的Place
記錄,它指的是AusSuburb
記錄。在我調用context.Add
方法之前,有一些設置處理。
(徵求意見向右滾動)
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Place place)
{
place.ID = Guid.NewGuid(); // necessary Logic
place.CoreCreatingTransIdent = DbFacade.gDbFacade.Transaction.TransIdent; // necessary Logic
place.CoreCreatingUserIdent = DbFacade.gDbFacade.Transaction.UserIdent; // necessary Logic
place.CoreName = "test"; // dummy value for testing
DbFacade.db.Places.Add(place); // add the place to context control
EntityState x = DbFacade.db.Entry(place).State; // get status of place after add
EntityState y = DbFacade.db.Entry(place.AusSuburb).State; // get status of suburb after add
DbFacade.db.SaveChanges(); // save changes - throws error
return RedirectToAction("Index");
}
執行後,x = Created
和y = Unchanged
,符合市場預期。
SaveChanges
將拋出一個錯誤,指出它找不到並更新AusSuburb
實體的存儲過程。這很奇怪,因爲我沒有試圖對該表進行更新。我正在對其相關表格進行插入。
在正常的絕望中,我爲AusSuburb
表提供了一個更新存儲過程,它只記錄它的調用並且什麼也不做。結果是錯誤消失了,但沒有記錄。 因此,看起來SaveChanges
正在檢查相關表的更新過程的存在,但不調用它。
我現在可以通過爲每個表創建一堆更新過程並配置它們來解決問題,但是我覺得這可能是一個錯誤,我應該在某處報告它。
有沒有人遇到這個或者類似的東西?
D
感謝您的支持。那篇文章是很好的背景。讀過它後,我可以添加以下內容: 我總是隻對一切使用一個上下文。我的DbFacade對象是一個單獨的ViewModel,它將上下文保持爲單例上下文。 我使用Id方法,而不是設置完整的AusSuburb對象,因爲文章推薦,儘管我也嘗試使用額外的行: place.AusSuburb = mmv.AusSuburbMgr.Goto(place.AusSuburbIdent); – decibel
再次 - place.AusSuburb = mmv.AusSuburbMgr.Goto(place。AusSuburbIdent); 插入sp實際上是一個「save」sp,它可以被調用來進行更新或插入,但我選擇僅將它用作插入,並且在應用程序中沒有任何更新。 – decibel