【发布时间】:2020-06-09 20:11:10
【问题描述】:
我正在学习如何使用 AutoMapper。首先,我不使用实体框架来读取我的数据。
因此,就我而言,我必须为响应模型的每个属性进行手动映射。
以下代码可能会帮助您更深入地了解这一点:
响应模型:
public class TotalLossResults
{
public string N_CLAIM_NUMBER { get; set; }
public string N_CLAIM_ID { get; set; }
}
映射类:
public class TLResultsMapper : Profile
{
private TotalLossResults tlResultsObj = new TotalLossResults();
public TLResultsMapper()
{
IMappingExpression<DataRow, TotalLossResults> mappingExpression = CreateMap<DataRow, TotalLossResults>();
foreach (var prop in tlResultsObj.GetType().GetProperties())
{
mappingExpression.ForMember(prop.Name, y => y.MapFrom(s => s[prop.Name]));
}
}
}
注意:在映射器类中,我为每个属性去掉了mappingExpression.ForMember 语句。但这仅在属性名称与我从数据库获得的结果的列名称(例如实体名称)相同时才有效。
我正在寻找一些选项,当属性名称与列名称不匹配时,我可以采用类似的方法将数据值映射到我的响应模型属性。
我试着做这样的事情:
我创建了另一个具有不同名称的属性的类:
public class TLResultsDifferentNames
{
public string N_CLAIM_NUMBER { get; set; }
public string N_CLAIM_ID { get; set; }
}
还有一个像这样的映射器实现:
private TLResultsDifferentNames tlResultsObj = new TLResultsDifferentNames ();
private TotalLossResults tlResultsColObj = new TotalLossResults ();*
for (int i = 0, j = 0; i<tlResultsObj.GetType().GetProperties().Length - 1 && j<tlResultsColObj.GetType().GetProperties().Length - 1; i++, j++)
{
mappingExpression.ForMember(tlResultsObj.GetType().GetProperties()[i].Name, y => y.MapFrom(s => s[tlResultsColObj.GetType().GetProperties()[j].Name]));
}
但这不起作用。它将最后一列的值绑定到所有模型属性。
在不使用手动映射方式的情况下实现映射的任何帮助/建议都会非常有帮助。
【问题讨论】:
-
这能回答你的问题吗? Convert DataRow to Object with AutoMapper
-
谢谢,但不幸的是这能解决我的问题;但是,我发现了一些有趣的东西,我也会发布解决方案。
标签: c# automapper