簡體   English   中英

如何將DTO從EF映射到模型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM