Как обновить объект модели домена на основе параметра модели домена, переданного в метод действия Изменить? - PullRequest
1 голос
/ 17 февраля 2011

У меня есть метод действия для обработки HTTP-POST следующим образом.

    [HttpPost]
    public ActionResult Edit(Movie model)
    {
        var movie = db.Movies.FirstOrDefault(x => x.Id == model.Id);

        if (movie == null)
        {
            TempData["MESSAGE"] = "No movie with id = " + id + ".";
            return RedirectToAction("Index", "Home");
        }

        if (!ModelState.IsValid)
            return View(model);

        // what method do I have to invoke here
        // to update the movie object based on the model parameter?
        db.SaveChanges();
        return RedirectToAction("Index");
    }

Вопрос: Как обновить movie на основе model?

Редактировать 1

На основе решения @ lukled приведен окончательный и рабочий код:

    [HttpPost]
    public ActionResult Edit(Movie model)
    {
        var movie = db.Movies.FirstOrDefault(x => x.Id == model.Id);

        if (movie == null)
        {
            TempData["MESSAGE"] = string.Format("There is no Movie with id = {0}.", movie.Id);
            return RedirectToAction("Index", "Home");
        }

        if (!ModelState.IsValid)
            return View(model);

        var entry = db.Entry(movie);
        entry.CurrentValues.SetValues(model);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

Ответы [ 3 ]

1 голос
/ 17 февраля 2011

Попробуйте это:

db.Movies.ApplyCurrentValues(model);
db.SaveChanges();

Вы также можете просто скопировать значения из модели в фильм:

movie.Title = model.Title;
movie.Director = model.Director;
db.SaveChanges();

OK. Вы используете Code First, так что это, вероятно, будет:

var entry = context.Entry(movie);
entry.CurrentValues.SetValues(model);
db.SaveChanges();

Но я не уверен в этом, потому что у меня не установлен Code First. Взято из:

http://blogs.msdn.com/b/adonet/archive/2011/01/30/using-dbcontext-in-ef-feature-ctp5-part-5-working-with-property-values.aspx

1 голос
/ 17 февраля 2011

Вы пробовали

TryUpdateModel(movie)
1 голос
/ 17 февраля 2011
[HttpPost]
public ActionResult Edit(Movie movie)
{

    if (movie == null)
    {
        TempData["MESSAGE"] = "No movie with id = " + id + ".";
        return RedirectToAction("Index", "Home");
    }

    if (!ModelState.IsValid)
        return View(movie);

    // what method do I have to invoke here
    // to update the movie object based on the model parameter?

    db.Movie.AddObject(movie);
    db.ObjectStateManager.ChangeObjectState(movie, System.Data.EntityState.Modified);

    db.SaveChanges();
    return RedirectToAction("Index");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...