Как правильно обновить экземпляр сущности модели в EF? - PullRequest
1 голос
/ 18 апреля 2011

У меня есть код, подобный приведенному ниже.Это работает, но я думаю, что это недостаточно ясно и требует от меня написать длинный код (назначая каждое свойство вручную).

// POST: /TableA/Edit
[HttpPost]
public ActionResult Edit(TableA formdata)
{
    TableA temp = myDB.TableA.First(a=>a.Id == formdata.Id);

    //A foreign key model in another TableB
    var tbb = myDB.TableB.First(a => a.Id == formdata.TableB.Id);
    temp.TableB = tbb;

    //fields in this table
    temp.field1= formdata.field1;
    temp.field2= formdata.field2;
    temp.field3= formdata.field3;

    myDB.SaveChanges();
    return RedirectToAction("Index");
}

Могу ли я иметь некоторый код, похожий на инициализаторы объектов:

    TableA temp = myDB.TableA.First(a=>a.Id == formdata.Id)
    {
        TableB =  myDB.TableB.First(a => a.Id == formdata.TableB.Id),
        field1= formdata.field1,
        field2= formdata.field2,
        field3= formdata.field3,
    }

    myDB.SaveChanges();
    return RedirectToAction("Index");

Ответы [ 2 ]

1 голос
/ 18 апреля 2011

Используя, например, AutoMapper , вы можете написать это так (возможно, придется настроить ограничение отображения объектов между свойствами, которые вы хотите скопировать):

[HttpPost]
public ActionResult Edit(TableA formdata)
{
    TableA temp = myDB.TableA.First(a=>a.Id == formdata.Id);
    temp.TableB = myDB.TableB.First(a => a.Id == formdata.TableB.Id);

    AutoMapper.Mapper.Map(formdata, temp);
    myDB.SaveChanges();
    return RedirectToAction("Index");
}
1 голос
/ 18 апреля 2011

Вы можете использовать метод TryUpdateModel

Обновляет указанный экземпляр модели, используя значения из текущего поставщика значений контроллера и включенные свойства.

[HttpPost]
public ActionResult Edit(TableA formdata)
{
    if (ModelState.IsValid)
    {
        TableA temp = myDB.TableA.First(a=>a.Id == formdata.Id);
        if (TryUpdateModel<TableA>(temp))
        {
            myDB.SaveChanges();
            return RedirectToAction("Index");
        }
    }

    return View();
}

Выбыло бы лучше вызвать метод Controller.TryUpdateModel (TModel, String []) , чтобы предотвратить добавление свойств, которые вы не хотите редактировать, в форму перед ее публикацией.Сюда входят идентификаторы или другие поля, которые вы не хотите, чтобы форма публиковала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...