Как я должен сопоставить Редактировать модели с моделями домена
Я пытаюсь понять, как лучше всего сопоставить поля в редактируемой модели (отправленные обратно из формы представления) в доменную модель, чтобы я мог SubmitChanges() и обновить запись в базе данных (через Linq to 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);
}
Метод обновления в моем слое обслуживания:
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 ответ
Использовать Automapper
public void Update(ProductVM productVM)
{
Product product = dataContext.Products.Single(p=>p.ProductId == productVM.ProductId);
AutoMapper.Mapper.DynamicMap<ProductVM, Product >(productVM, product );
dataContext.SubmitChanges();
}