在MVC中仅更新对象的某些字段的最佳方法是什么?

时间:2015-06-16 10:40:48

标签: c# asp.net-mvc asp.net-mvc-5 entity-framework-6

我正在尝试更新新闻帖子。该帖子有一个名为Created的日期字段,该字段在最初创建记录时填充。我在更新时不会包含此内容,因此在使用以下方法时,这将为null并引发错误。

我正在使用MVC 5和Entity Framework 6

[XDebug]
;zend_extension=opcache.so
zend_extension = /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so
xdebug.remote_enable=1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "localhost"
xdebug.remote_mode = "req"
xdebug.remote_port = 9001
xdebug.idekey = "PHPSTORM"

这种方法确实有效,但看起来有点笨拙。

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Id,Title,Summary,Content")] Post post) {
    if (ModelState.IsValid) {
        db.Entry(post).State = EntityState.Modified;
        db.SaveChanges();

        return RedirectToAction("Index");
    }
    return View(post);
}

这样做的最佳做法是什么?

谢谢!

1 个答案:

答案 0 :(得分:6)

EF还有一个简单的内置" AutoMapper"这与标量值一起使用。

public class PostViewModel()
{
     public string Id {get;set;}
     public string Title {get;set;}
     public string Summary {get;set;}
     public string Content {get;set;}
}

public ActionResult Edit(PostViewModel viewModel)
{
    if (ModelState.IsValid) {
        var newsPost = db.Posts.Find(post.Id);
        ...
        db.Entry(newsPost).CurrentValues.SetValues(viewModel);
        ...
    }
}