我试图弄清楚AutoMapper如何在从域模型到具有复杂集合的视图模型创建地图时起作用。 在我的域模型(Search.Domain)中,
我有以下内容:
namespace Search.Domain.Model
{
public class Result
{
public int SearchTime { get; set; }
public List<ResultDetails> Context { get; set; }
}
public class ResultDetails
{
public string Entity { get; set; }
public string Jurisdiction { get; set; }
public DateTime DateReported { get; set; }
public string Description { get; set; }
public DateTime DateEntered { get; set; }
public string AssociatedLink { get; set; }
public int Relevance { get; set; }
}
}
使用MVC项目(Search.WebUI)我有以下内容:
namespace Search.WebUI.Models
{
public class ResultViewModel
{
public int SearchTime { get; set; }
public List<ResultDetails> Context { get; set; }
}
public class ResultDetails
{
public string Entity { get; set; }
public string Jurisdiction { get; set; }
public DateTime DateReported { get; set; }
public string Description { get; set; }
public DateTime DateEntered { get; set; }
public string AssociatedLink { get; set; }
public int Relevance { get; set; }
}
}
在控制器内(HomeController.cs)
namespace Search.WebUI.Controllers
{
public class HomeController : Controller
{
private ISearchResultManager sr = new ResultManager();
public ActionResult Index()
{
ResultViewModel searchresults;
var results = sr.GetSearchResults(5);
Mapper.CreateMap<Search.Domain.Model.Result, ResultViewModel>();
searchresults = Mapper.Map<Search.Domain.Model.Result, ResultViewModel>(results);
return View("Home", searchresults);
}
}
}
运行时生成的错误消息是:
Missing type map configuration or unsupported mapping.
Mapping types:
ResultDetails -> ResultDetails
Search.Domain.Model.ResultDetails -> Search.WebUI.Models.ResultDetails
Destination path:
ResultViewModel.Context.Context.Context0[0]
Source value:
Search.Domain.Model.ResultDetails
在看这个时,似乎嵌套的List<ResultDetails>
导致了一个问题,但我不知道我应该做些什么来处理这种类型的映射。
一直回到域中以引用该类型是否正确?这似乎是我将域名拉入UI,我不想这样做?
是否有另一种选择来映射域模型以在UI中查看模型?基本上我希望在UI中有一个视图模型,我可以扩展到域模型之外用于UI目的,而不是引用域模型。
我是autoMapper
的新手,所以这整件事可能都错了?我将不胜感激任何建议或指导。
答案 0 :(得分:0)
在映射包含类时,AutoMapper不会查看所有可能的子映射。您还需要显式添加ResultDetails
的映射:
Mapper.CreateMap<Search.Domain.Model.Result.ResultDetails,
Search.WebUI.Models.ResultDetails>();