Модель, связывающая проблему в LINQ к SQL

Я сейчас начинаю работать с 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);
}
1
задан abatishchev 27 July 2010 в 06:04
поделиться

1 ответ

Вам следует повторно запросить исходную tableModel, сопоставить обновленную строку и затем обновить.

Возможно, что-то вроде этого (только пример, ничего не зная о вашей схеме):

var originalTableModel = db.GetById( tableModel.Id);
originalTableModel.FirstName = tableModel.FirstName;
db.SubmitChanges();
2
ответ дан 2 September 2019 в 22:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: