我有一個基於Shoulders of Giants | A RESTful Wizard Using ASP.Net MVC… Perhaps?編輯的RESTful嚮導。這個嚮導有一個CANCEL按鈕,當按下它時,會觸發下面的代碼。強制刪除頁面上的ObjectStateManager條目
// If the user cancels, drop out altogether
if (!string.IsNullOrEmpty(CANCEL_BUTTON)) {
Session.Remove(VACANCYWIZARD_SESSION_KEY);
repository._entities.ObjectStateManager.GetObjectStateEntry(inProgressVacancyWizard.Vacancy).Delete();
return this.RedirectToAction("Index", "Home");
}
現在,爲了能夠調用的SaveChanges ()取消按鈕後,我必須手動刪除從我ObjectStateManager嚮導中的條目。但是,當您通過手動返回到主頁取消嚮導時,它將保留並且_entities.SaveChanges()的下一次調用將拋出一個異常,它無法將對象從嚮導進度保存到數據庫,因爲它仍處於對象狀態。
請注意,在嚮導的步驟之間我做而不是保存任何內容到數據庫。我把它在會話狀態檢索它的每一步:
NewVacancy inProgressVacancyWizard = Session[VACANCYWIZARD_SESSION_KEY] as NewVacancy;
不知何故,但是,inProgressVacancyWizard.Vacancy會出現在ObjectStateManager所以我只好去其他地方刪除它,我會得到錯誤,不完整空缺車型,而_entities.SaveChanges()被另一個對象調用。
有沒有辦法來解決這個問題?
//編輯 經過一番閱讀後,我發現我的知識庫的基礎不好。如發現 here。目前我懷疑在同一篇文章中實現「每個業務事務的一個ObjectContext實例」中提到的選項。這會是一個明智的事情嗎?我想更多地瞭解它,因爲它將是一個重要的重構。
public static Repository Instance
{
get
{
if (instance == null) {
instance = new Repository();
}
return instance;
}
}
#region Constructor: Repository()
/// <summary>
/// Constructor
/// </summary>
private Repository()
{
_entities = new DBModelEntitiesNew2();
}
謝謝你的迴應,這確實是問題所在。儘管讓我的嚮導頁面切換並不那麼容易。這將是最終的答案,因爲它是正確的。雖然我很想聽聽關於編輯信息的一些意見。 – bastijn 2010-02-22 22:08:06
爲什麼要使存儲庫成爲單身人士?這對我來說沒有意義。你希望你的網絡應用程序是無狀態的。 – 2010-02-22 22:42:02