Я сейчас начинаю работать с LINQ и довольно знаком с MVC. У меня есть представление со строгим контролем типов, которое обновляет запись. Я успешно сделал создание:
Это хорошо работает и создает запись в базе данных:
public ActionResult Create(TABLEMODEL tableModel)
{
DBDataContext db = new DBDataContext();
if (ModelState.IsValid)
{
db.TABLEMODEL.InsertOnSubmit(tableModel);
db.SubmitChanges();
}
}
Но при попытке обновить:
public ActionResult Manage(TABLEMODEL tableModel)
{
DBDataContext db = new DBDataContext();
if (ModelState.IsValid)
{
db.SubmitChanges();
}
}
Это перестало работать, в том смысле, что это не обновляет запись в базе данных. Никакая фактическая ошибка/исключение не происходит, и я могу ступить через него очень хорошо.
Я уверен, что пропускаю что-то, но не могу найти что. Я ценю любую справку по этому вопросу.
ОБНОВЛЕНИЕ
Я действительно замечал это, если я получаю запись с помощью DataContext:
DBDataContext db = new DBDataContext();
var m = db.TABLEMODELs.Single(m => m.ID == 1);
m.Name = "UpdatedName";
db.SubmitChanges();
Это действительно обновляет, таким образом, я предполагаю, что так или иначе не связываю от своей модели до контекста LINQ.
Мое решение
Я нашел, что необходимо получить объект и затем обновить это с формой. Достаточно простой.
[HttpPost]
public ActionResult Manage(int ID, FormCollection form)
{
DBSDataContext db = new DBSDataContext();
var t= db.TABLEMODELs.Single(b => b.ID == ID);
UpdateModel(t);
if (ModelState.IsValid)
{
db.SubmitChanges();
}
return View(t);
}
Вам следует повторно запросить исходную tableModel, сопоставить обновленную строку и затем обновить.
Возможно, что-то вроде этого (только пример, ничего не зная о вашей схеме):
var originalTableModel = db.GetById( tableModel.Id);
originalTableModel.FirstName = tableModel.FirstName;
db.SubmitChanges();