1

我一直在读你应该使用 ViewModels(和 AutoMapper)——所以这是我的初步步骤。

我只是在寻找一些保证,即我正在将我的模型映射到我的视图模型,并且在发回时,我正在从返回的视图模型中正确更新数据库记录:

    //
    // GET: /Customer/EditPartial
    public ActionResult EditPartial(int id)
    {
        var customerVM = db.Customers.Where(x => x.UserName == User.Identity.Name && x.CustomerId == id).FirstOrDefault();
        AutoMapper.Mapper.CreateMap<Customer, CustomerViewModel>();
        CustomerViewModel customer = AutoMapper.Mapper.Map<Customer, CustomerViewModel>(customerVM);
        return PartialView("CustomerPartial2", customer);
    }

    //
    // POST: /Customer/EditPartial
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult EditPartial(CustomerViewModel customerviewmodel)
    {
        if (ModelState.IsValid)
        {
            Customer customer = db.Customers.Where(x => x.UserName == User.Identity.Name && x.CustomerId == customerviewmodel.CustomerId).FirstOrDefault();
            if (customer == null)
            {
                return HttpNotFound();
            }
            customer.CustomerName = customerviewmodel.CustomerName;
            customer.Email = customerviewmodel.Email;
            db.Entry(customer).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return PartialView("CustomerPartial2", customerviewmodel);
    }

那么,我的 Get 设置 Automapper 是否正确?

我从 viewmodel 更新 CustomerName 和 Email 的方式是否正确,或者是否有更简单的方法再次使用 AutoMapper?

谢谢,

标记

4

2 回答 2

1

由于 AutoMapper 旨在简洁,我认为这段代码会更优雅:

//
    // POST: /Customer/EditPartial
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult EditPartial(CustomerViewModel customerviewmodel)
    {
        if (ModelState.IsValid)
        {
            Customer customer = db.Customers.Where(x => x.UserName == User.Identity.Name && x.CustomerId == customerviewmodel.CustomerId).FirstOrDefault();
            if (customer == null)
            {
                return HttpNotFound();
            }
            Mapper.CreateMap<CustomerViewModel , Customer>();
            Mapper.Map(customerviewmodel, customer);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return PartialView("CustomerPartial2", customerviewmodel);
    }

在您的代码中,没有太多手动属性分配,但在某些情况下,您可能必须使用您的方法输入很多内容。

于 2015-03-02T06:04:23.160 回答
1

如果您正确完成映射,则说明您使用正确。无论如何,AutoMapper 都可以用于获取和发布。它在生活中的唯一目的是将您的一个类映射到另一个类(在您的特定情况下,域模型到视图模型,反之亦然)。如果映射是正确的(在调试器中),你就可以了。如果没有 - 让我们知道您遇到了什么问题。

如果您不确定如何使用它,请参阅这篇文章:使用Visual Studio 杂志的 AutoMapper 简化您的投影。

这是 ASP.NET MVC 的另一个特定内容:Using Automapper with ASP.NET MVC application

谢谢你。

于 2013-05-07T14:18:40.617 回答