[英]How to map DTO from EF to Model
我的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界面。
您可以使用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層需要了解數據層。
我邀請您回顧一下自動映射器這樣的框架,它使您能夠輕松執行對象到對象的映射。
另一個選項是CX.Mapper ,使用起來非常簡單,您無需預先配置地圖:
[HttpGet]
public ActionResult Edit(int id)
{
var item = this.db.Items.Find(id);
var model = CX.Mapper.Mapping.MapNew<Item, ItemDto>(item);
return View(model);
}
[HttpPost]
public ActionResult Edit(ItemDto model)
{
if(Model.IsValid)
{
var item = this.db.Items.Find(ItemDto.Id);
CX.Mapper.Mapping.Map<ItemDto, Item>(model, item);
this.db.SaveChanges();
return RedirectToAction("Index");
}
return View(model);
}
您可以使用NuGet進行安裝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.