我在MVC中有一個多頁(多視圖)表單,其結果將被保存到單個數據庫表中。ASP.NET MVC 3 - LINQ到存儲在會話中的SQL對象
在窗體的第一頁中初始化linq對象的代碼片段。
public ActionResult MyForm()
{
// returns a Linq object stored in session
Application currentApp = Application.FromSession();
// if null, initialize the object and save to session
if (currentApp == null)
{
currentApp = new Application();
currentApp.SessionSave();
}
return View(currentApp);
}
這裏是爲從強類型模型更新一些數據的最終動作代碼樣本片斷,然後觸發數據庫保存。
[HttpPost]
public ActionResult MyForm3(Application app, FormCollection coll)
{
Application currentApp = Application.FromSession();
currentApp.Contact = app.Contact;
currentApp.AddFormToXml(coll);
currentApp.SessionSave();
_db.Applications.InsertOnSubmit(currentApp);
_db.SubmitChanges();
return RedirectToAction("Blah");
}
我快到的問題是,的SubmitChanges失敗,錯誤
無法插入NULL值插入 列 '的ApplicationData',表 'MyTable的'; 列不允許有空值。 INSERT 失敗。該聲明已被終止 。
在這種情況下,ApplicationData是一個xml類型的列,該列被LINQ解釋爲XElement對象。當我在SubmitChanges()中設置斷點並檢查app.ApplicationData的值時,它顯然是填充的(非空),但我仍然會遇到這個錯誤。我唯一的想法是,我誤解了數據上下文的工作原理。它似乎只有這一列有問題。是否有可能需要找出一種方法將XElement對象(ApplicationData)附加到我的活動數據上下文(_db)中,如果是這樣,我該怎麼做呢?
你的代碼意味着你試圖插入currentApp,但你的評論說你檢查了應用程序中的列值。這些引用是針對不同的對象。我錯過了什麼? – Sorax 2011-02-03 22:18:06
currentApp從會話中加載,因爲它對Linq對象進行了部分更新。我無法每次簡單地從數據庫保存/重新加載的原因是,有必要的字段遍佈在此表單的多個頁面中,這就是爲什麼我將它保留在Session中的原因。在發佈頁面時,我只更新來自該特定頁面的值的會話實例。在發佈最終頁面之前,我不保存到DB。 – Keith 2011-02-03 22:22:25