我应该如何将编辑模型映射到域模型

时间:2011-08-05 21:36:01

标签: asp.net-mvc linq-to-sql mapping viewmodel editmodel

我正在尝试了解将编辑模型中的字段(从视图表单发回)映射到域模型的最佳方法,以便我可以SubmitChanges()并更新数据库记录(通过Linq到SQL) 。我的例子很简单,答案可能只是手动完成。我问的问题是有更多字段的模型,它仍然可以手动完成,也许这就是答案 - 但有更简单的方法(也许使用AutoMapper)?

我的域名模型:

public class Product
{
    public int ProductId { get; set; }
    public string Name { get; set; }
    public int Color { get; set; }
    public string SerialNumber { get; set; }
}

我的观看/编辑模式:

public class ProductVM
{
    public int ProductId { get; set; }
    public string Name { get; set; }
    public IEnumberable<Color> Colors { get; set; } // To populate a dropdown in the view with color key/values
}

我的控制器操作:

[HttpPost]
public ActionResult UpdateProduct(ProductVM product)
{
    var productService = new ProductService();
    productService.Update(product);
}

我的服务层中的Update方法:

public void Update(ProductVM productVM)
{
    Product product = dataContext.Products.Single(p=>p.ProductId == productVM.ProductId);
    // What's the best way to map the fields of productVM into product so I can submit the changes?
    dataContext.SubmitChanges();
}

我只想映射productVM中与产品中的字段匹配的字段。编辑模型具有域模型中不存在的字段,而域模型具有编辑模型中不存在的字段。我的最终目标是从编辑模型中的字段更新数据库中的字段。

由于

1 个答案:

答案 0 :(得分:2)

使用自动播放器

public void Update(ProductVM productVM)
{
    Product product = dataContext.Products.Single(p=>p.ProductId == productVM.ProductId);
    AutoMapper.Mapper.DynamicMap<ProductVM, Product >(productVM, product );
    dataContext.SubmitChanges();
}