Asp.net mvc 在ASP.NET MVC中更新数据是一种好方法吗?

Asp.net mvc 在ASP.NET MVC中更新数据是一种好方法吗?,asp.net-mvc,entity-framework,linq,Asp.net Mvc,Entity Framework,Linq,我正在更新数据库中的现有数据。基本上,我从表中检索所有数据,并逐个手动更新每一列。你认为这是个好办法吗?或者请给我建议另一种简单的方法。我的方法看起来太长了,我的意思是要更新很多行 [HttpPost] public ActionResult SaveMovie(HttpPostedFileBase file, MovieViewModel model) { if (!ModelState.IsValid) { var viewModel

我正在更新数据库中的现有数据。基本上,我从表中检索所有数据,并逐个手动更新每一列。你认为这是个好办法吗?或者请给我建议另一种简单的方法。我的方法看起来太长了,我的意思是要更新很多行

[HttpPost]
public ActionResult SaveMovie(HttpPostedFileBase file, MovieViewModel model)
{
        if (!ModelState.IsValid)
        {
            var viewModel = new MovieViewModel
            {
                ProHouses = _context.ProHouses.ToList()
            };

            return View("AddMovie", viewModel);
        }

        if (model.Movies.Id == 0)
        {
            if (file != null)
            {
                Guid RandomName = Guid.NewGuid();
                var fileExtention = Path.GetExtension(file.FileName);
                var FileName = RandomName + fileExtention;
                var path = Path.Combine(Server.MapPath("~/MovieTitle"), RandomName + fileExtention);
                file.SaveAs(path);
                model.Movies.TitleURL = FileName;
            }

            _context.Movies.Add(model.Movies);
        }
        else
        {
            var movieInTable = _context.Movies.SingleOrDefault(m => m.Id == model.Movies.Id);
            movieInTable.Budget = model.Movies.Budget;
            movieInTable.Writer = model.Movies.Writer;
            movieInTable.Country = model.Movies.Country;
            movieInTable.Genre = model.Movies.Genre;
            movieInTable.Duration = model.Movies.Duration;
            movieInTable.Plot = model.Movies.Plot;
            movieInTable.Name = model.Movies.Name;
            movieInTable.ProHouseId = model.Movies.ProHouseId;
            movieInTable.Rating = model.Movies.Rating;
            movieInTable.Director = model.Movies.Director;
            movieInTable.Year = model.Movies.Year;
            movieInTable.TitleURL = model.Movies.TitleURL;
        }

        _context.SaveChanges();

        ViewBag.Message = "Movie Added";

        return View("Confirmation");
}
我对这部分感到困惑:

else
{
    var movieInTable = _context.Movies.SingleOrDefault(m => m.Id == model.Movies.Id);
    movieInTable.Budget = model.Movies.Budget;
    movieInTable.Writer = model.Movies.Writer;
    movieInTable.Country = model.Movies.Country;
    movieInTable.Genre = model.Movies.Genre;
    movieInTable.Duration = model.Movies.Duration;
    movieInTable.Plot = model.Movies.Plot;
    movieInTable.Name = model.Movies.Name;
    movieInTable.ProHouseId = model.Movies.ProHouseId;
    movieInTable.Rating = model.Movies.Rating;
    movieInTable.Director = model.Movies.Director;
    movieInTable.Year = model.Movies.Year;
    movieInTable.TitleURL = model.Movies.TitleURL;
}

首先,编写的代码很难重用,在维护过程中会遇到困难。假设您正在重复这样的代码并在多个文件中使用它,突然您发现另一个字段是必需的,需要添加。所以你必须改变所有的密码

其次,建议不要将数据操作代码放入控制器中。尝试创建另一层(类项目)以放置此类代码。使用Automapper类库绝对有助于减少映射


否则,正如上面Travis所建议的,您可以使用构造函数来填充属性。

首先,编写的代码很难重用,在维护过程中会遇到困难。假设您正在重复这样的代码并在多个文件中使用它,突然您发现另一个字段是必需的,需要添加。所以你必须改变所有的密码

其次,建议不要将数据操作代码放入控制器中。尝试创建另一层(类项目)以放置此类代码。使用Automapper类库绝对有助于减少映射


否则,正如上面Travis所建议的,您可以使用构造函数来填充属性。

有很多不同的方法来实现这一点。您可以使用复制构造函数、基于接口的强制、属性映射器或服务方法。您可以使用复制构造函数、基于接口的强制、属性映射器或服务方法。