У меня есть многостраничная (multi-view) форма в MVC, результаты которой будут сохранены в одной таблице базы данных.
Фрагмент кода, который инициализирует объект linq на первой страницеform.
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»;столбец не допускает пустых значений.Вставить не удается.Оператор был прерван.
В этом случае ApplicationData является столбцом типа xml, который LINQ интерпретирует как объект XElement.Когда я устанавливаю точку останова на SubmitChanges () и проверяю значение app.ApplicationData, оно четко заполняется (не ноль), и все же я продолжаю получать эту ошибку.Я думал только о том, что я неправильно понимаю, как работают контексты данных.Это только кажется, что есть проблема с этим одним столбцом, хотя.Возможно ли, что мне нужно найти способ присоединить объект XElement (ApplicationData) к моему активному контексту данных (_db), и если да, как мне это сделать?