Как я должен сопоставить Редактировать модели с моделями домена - PullRequest
1 голос
/ 06 августа 2011

Я пытаюсь понять, как лучше отобразить поля в Редактируемой модели (отправленные обратно из формы представления) в Доменную модель, чтобы я мог 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
}

My Controller Action:

[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 Ответ

2 голосов
/ 06 августа 2011

Использование 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();
}
...