[英]How to use AutoMapper without Entity Framework?
我正在學習如何使用 AutoMapper。 首先,我不使用實體框架來讀取我的數據。
因此,就我而言,我必須為響應 model 的每個屬性進行手動映射。
下面的代碼可以幫助您更深入地了解這一點:
響應 model:
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]));
}
}
}
注意:在映射器 class 中,我使用了每個屬性來擺脫每個屬性的mappingExpression.ForMember
語句。 但這僅在屬性名稱與我從數據庫獲得的結果的列名稱(例如實體名稱)相同時才有效。
我正在尋找一些選項,當屬性名稱與列名稱不匹配時,我可以對 map 數據值對我的響應 model 屬性采取類似的方法。
我試着做這樣的事情:
我創建了另一個 class ,它具有不同名稱的屬性:
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]));
}
但這不起作用。 它將最后一列的值綁定到所有 model 屬性。
在不使用手動映射方式的情況下實現映射的任何幫助/建議都會非常有幫助。
今天我可以在 Auto Mapper 中找到一些非常有趣的東西。 這是屬性映射,使用它我不必擔心我的模型的任何類型的手動/動態映射。
下面是現在對所有屬性都能完美運行的代碼:
Ex1:這里所有屬性的名稱都相同
[AutoMap(typeof(object))] //this takes our Source class name
public class TotalLossResults
{
public string N_CLAIM_NUMBER { get; set; }
public string N_CLAIM_ID { get; set; }
}
Ex2:在這里我們得到了不同的屬性
[AutoMap(typeof(TotalLossResults))] //this takes our Source class name
public class TLResultsDifferentNames
{
[SourceMember(nameof(TotalLossResults.N_CLAIM_NUMBER))]
public string claimNumberOfJack { get; set; }
public string claimIDofJack { get; set; }
}
對於映射配置,我們將使用以下代碼:
var config1 = new MapperConfiguration(cfg =>
cfg.AddMaps(typeof(TotalLossResults)));
var mapper = new Mapper(config1);
var response = mapper.Map<TotalLossResults>(sourceObject);
注意:最好在 App Start 中創建配置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.