0

在这里,我使用 automapper 类将“userdetails”类与“FinalizedDetails”类匹配。我已经尝试过,但我只得到了姓氏值,但对于 NameFirst 和 BooksInfo 它什么也不返回。如何解决这个问题我对自动映射器很陌生。我不明白 Automapper 类的完整用法。

家庭控制器:

 public ActionResult Index()
 {
     UserDetails objDao = setData();
     Mapper.CreateMap<UserDetails, FinalizedDetails>();
     FinalizedDetails objDetails =  Mapper.Map<UserDetails,FinalizedDetails >(objDao);
     return View(objDetails);
 }

 [HttpPost]
 public ActionResult Index(string id)
 {
     return View();
 }
 private UserDetails setData()
 {
     UserDetails daoObj = new UserDetails();
     daoObj.FirstName = "Mike";
     daoObj.LastName = "Castillo";
     daoObj.Salary = 6000;
     daoObj.Certified = true;
     daoObj.BookDetails = new Books();
     daoObj.BookDetails.BookName = "Auto Mapper Tuts";
     daoObj.BookDetails.BookPrice = 200;
     daoObj.BookDetails.BookDescription = "A brief Description about Automapper class";
     return daoObj;
 }

索引.cshtml:

@model AutoMapper_Demo.Models.FinalizedDetails
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
    @Html.TextBox("First anme");
    <p>First name : @Model.FirstName</p>
    <p>Last Name : @Model.LastName</p>
    <p>BookInfo : @Model.BooksInfo</p>

楷模 :

public class UserDetails
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string getFullName()
    {
        return FirstName + " " + LastName;
    }
    public int Salary { get; set; }
    public bool Certified { get; set; }
    public Books BookDetails { get; set; }
}
public class Books
{
    public string BookName { get; set; }
    public int BookPrice { get; set; }
    public string BookDescription { get; set; }
}
public class FinalizedDetails
{
    public string NameFirst { get; set; }
    public string LastName { get; set; }
    public string BooksInfo { get; set; }
}

输出

First name : 

Last Name : Castillo

BookInfo : 
4

1 回答 1

1

Automapper 不会自动映射没有匹配名称的属性(实际上它无法知道如何做到这一点),但是您可以自己指定:

Mapper.CreateMap<UserDetails, FinalizedDetails>()
      .ForMember(d => d.NameFirst, o => o.MapFrom(s => s.FirstName));

编辑

由于您已询问如何映射BookInfo,并假设您想要某种摘要,您可以(例如)执行以下操作:

Mapper.CreateMap<UserDetails, FinalizedDetails>()
      .ForMember(d => d.NameFirst, o => o.MapFrom(s => s.FirstName))
      .ForMember(d => d.BooksInfo,
                 o =>
                 o.MapFrom(
                     s => string.Format("{0} - ({1})", s.BookDetails.BookName, s.BookDetails.BookDescription)));
于 2013-07-31T05:02:48.840 回答