我正在尝试使用一个GetData
获取一些数据。此操作方法通过此Action方法中的服务层从控制器调用:
public PartialViewResult Grid()
{
var model = new DomainModels.Reports.MeanData();
using (var reportsClient = new ReportsClient())
{
model = reportsClient.GetData(reportType, toDate, fromDate); //<= error on this line
}
return PartialView("_Grid", model);
}
我收到此错误:
无法隐式转换类型 '
System.Collections.Generic.List<BusinessService.Report.MeanData>
'到 'DomainModels.Reports.MeanData
'
一位同事建议使用Automapper,所以我根据对他有用的方法改变了这样的Action方法:
public PartialViewResult Grid()
{
using (var reportsClient = new ReportsClient())
{
Mapper.CreateMap<DomainModels.Reports.MeanData, BusinessService.Report.MeanData>();
var model = reportsClient.GetData(reportType, toDate, fromDate);
DomainModels.Reports.MeanData viewModel = //<= error on this line
Mapper.Map<DomainModels.Reports.MeanData, BusinessService.Report.MeanData>(model);
}
return PartialView("_Grid", viewModel);
}
我收到此错误:
最佳重载方法匹配 '
AutoMapper.Mapper.Map<DomainModels.Reports.MeanData,BusinessService.Report.MeanData>
(DomainModels.Reports.MeanData)' 有一些无效的论点
DomainModel实体:
[DataContract]
public class MeanData
{
[DataMember]
public string Description { get; set; }
[DataMember]
public string Month3Value { get; set; }
[DataMember]
public string Month2Value { get; set; }
[DataMember]
public string Month1Value { get; set; }
}
可以在生成的reference.cs
中找到的BusinessService实体具有与DomainModel实体同名的属性。
在这两种情况下,我做错了什么?
答案 0 :(得分:1)
您的报告客户端返回业务实体的列表,您正在尝试将它们映射到单个实体。我认为你应该将业务实体的集合映射到视图模型的集合(目前你正在尝试将集合映射到单一视图模型):
using (var reportsClient = new ReportsClient())
{
List<BusinessService.Report.MeanData> model =
reportsClient.GetData(reportType, toDate, fromDate);
IEnumerable<DomainModels.Reports.MeanData> viewModel =
Mapper.Map<IEnumerable<DomainModels.Reports.MeanData>>(model);
}
return PartialView("_Grid", viewModel);
将映射创建移至应用程序开始:
Mapper.CreateMap<DomainModels.Reports.MeanData, BusinessService.Report.MeanData>();
如果您的类型具有相同名称,请考虑使用别名:
using BusinessMeanData = BusinessService.Reports.MeanData;
using MeanDataViewModel = DomainModel.Reports.MeanData;
或(更好)将ViewModel
后缀添加到充当视图模型的类型名称。在这种情况下,代码将如下所示:
using (var reportsClient = new ReportsClient())
{
var model = reportsClient.GetData(reportType, toDate, fromDate);
var viewModel = Mapper.Map<IEnumerable<MeanDataViewModel>>(model);
}
return PartialView("_Grid", viewModel);