Проблема привязки модели в LINQ to SQL - PullRequest
1 голос
/ 27 июля 2010

Я только сейчас начинаю работать с 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 Ответ

2 голосов
/ 27 июля 2010

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

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

var originalTableModel = db.GetById( tableModel.Id);
originalTableModel.FirstName = tableModel.FirstName;
db.SubmitChanges();
...