如何将DTO从EF映射到模型

时间:2012-01-01 19:13:40

标签: c# asp.net-mvc interface model separation-of-concerns

我的UI MVC层中有以下模型Person:

public class Person
{
     [Required]
     public string FirstName { get; set; }

     [Required]
     public string LastName { get; set; }

     public int PersonTypeID { get; set; }

     [Required]
     public string Phone { get; set; }

     [Required]
     public string Email { get; set; }

}

在我的数据层中,我有一个具有相同属性名称的类,但不同的meta(自然地):

public partial class Person : EntityObject { ... }

如何在不让数据层了解MVC UI层的情况下,将数据从数据层返回到我的MVC UI层?

注意:我也有一个简单的IPerson接口,同样具有相同的属性名称。

2 个答案:

答案 0 :(得分:4)

您可以使用AutoMapper在域模型和视图模型之间进行映射。 MVC层知道数据层,但数据层不需要了解MVC层。

这是一个常见的模式:

public ActionResult Foo()
{
    var person = _repository.GetPerson();
    var personViewModel = Mapper.Map<Person, PersonViewModel>(person);
    return View(personViewModel);
}

反过来说:

[HttpPost]
public ActionResult Foo(PersonViewModel personViewModel)
{
    if (!ModelState.IsValid)
    {
        return View(model);
    }
    var person = Mapper.Map<PersonViewModel, Person>(personViewModel);
    _repository.UpdatePerson(person);
    return RedirectToAction("Success");
}

如您所见,数据层不需要了解MVC层的任何信息。这是需要了解数据层的MVC层。

答案 1 :(得分:1)

我邀请您查看一个automapper这样的框架,它使您能够轻松地执行对象到对象的映射。

相关问题