我的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接口,同样具有相同的属性名称。
答案 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这样的框架,它使您能够轻松地执行对象到对象的映射。