2010-09-03 33 views
0

我正在使用linq to sql在網絡框架4.0中構建表單,並且有關於對象持久性的問題。.NET和SQL Server中的對象持久性,具有不完整的值

我有一個情況,一個用戶被要求填寫一個很長的表格幾頁的長度。由於時間太長,因此需要在數據中間保存數據。

會話級持久性不是一個選項,因爲他們可以保存表格中途,關閉瀏覽器,以及稍後檢索部分填充的表單。

表單字段映射到一個數據庫表,每個表單都是一個數據庫行,但是,有幾個字段是必需的,並且在數據庫中設置爲不可空。我想提供不完整地保存數據值的功能。

什麼是保存中間對象的最佳方法是不完整的狀態,然後,當用戶提交表單時,提交已驗證和完整的對象。

NHibernate也不是一個選項。

任何好主意讚賞。

回答

0
  • 如果你想讓他們來負責你可以推它在Cookie(或窗體身份驗證票證數據)
  • 您可以使用asp.net的緩存,如果你不介意的服務器開銷。
0

由於您希望人們能夠繼續填寫停止的表單,即使他們離開網站或重新啓動瀏覽器,也可以將部分完成的表單保存在ViewState或Session對象中。

我認爲最簡單實現的兩個想法是將所有部分完成的值存儲在瀏覽器cookie中。或者甚至更好(如果你有任何數據庫的控制權)在db中創建一個與表格幾乎相同的新表格。將在部分完成的表單中輸入的值保存在該表中(稱之爲Form_Incomplete或其他),然後只有當用戶在最終頁面完成時進行最終保存時才插入到表單表中。

1

在我看來,你需要回答幾個問題。

  1. 這些數據存在多久。
  2. 用戶如何「恢復」
  3. 要存儲它
  4. 你想要什麼格式。
  5. 你如何打算處理版本問題,部分數據在哪裏。

我肯定會考慮序列化Session End上的數據並將其存儲在數據庫中。當用戶返回時,您可以查找並詢問他們是否想要恢復。除了#5之外,這將處理所有上述內容。無論何時您更改對象模型,它都會爲您的序列化數據產生兼容性問題。

我可能要做的另一個選擇是儘早詢問所有必需的數據,然後您可以隨時保存。

另一種選擇是簡單地放鬆不可空的規則,然後再次您可以隨時保存。

+0

Conrad:窗體上有一個SAVE按鈕以及一個SUBMIT按鈕。 SAVE會保存不完整,SUBMIT會將完成的表單發佈到數據庫。無論用戶希望如何恢復用戶版本控制不會成爲問題,SAVED信息可以從最近的SAVE中檢索,並且可以覆蓋任何內容。只有提交的數據是相關的。 我不知道應用程序如何「放鬆」數據庫表的可空性,但這對我來說不是一種選擇。 – 2010-09-03 19:35:07