[英]Automapper not populating destination from source
我有一個簡單的測試解決方案,它由兩個項目組成(一個“業務”層和一個數據訪問層),使用Catel將兩個項目結合在一起-可以正常工作,沒有問題。
但是,一直在閱讀有關AutoMapper通過允許輕松填充DTO來幫助在這樣的設置中移動數據的有用性,並決定讓它看起來...那是我的問題開始的時候!
我使用的是Entity Framework 6.1,VS 2013 Express for Desktop,並且正在訪問SQL Server Express 14數據庫-數據檢索和數據在我的視圖中正確顯示都沒有問題。
AutoMapper是使用NuGet添加的。
為了使用AutoMapper,我在App.xaml.cs中設置了以下內容
private void InitializeAutomapper()
{
Mapper.CreateMap<Result, ResultDto>();
Mapper.AssertConfigurationIsValid();
}
這段代碼是我的“ OnStartup”內部調用的第一項。
我的業務層中的服務調用數據訪問層,並檢索結果實體的列表。
隨后,我從該列表中選取一個實體,並在AutoMapper映射調用中使用該實體。
我正在嘗試使用以下方法從該單個實體填充resultDTO
Result res = ResultList.First();
ResultDto resultDTO = Mapper.Map<Result, ResultDto>(res);
“ res”已正確填充了數據,但resultDTO填充了各個數據類型的默認值(in = 0,string = null,DateTime = {01/01/0001 00:00:00}),即; 沒有值從源映射到目標 。
在這兩個項目中都有對AutoMapper和AutoMapper.Net的引用,並且不會引發任何錯誤-它只是不能像所宣傳的那樣工作...
我並沒有放棄軟件,只是問我做錯了什么!
我意識到這里沒有太多代碼需要處理,但實際上,這里發布的內容幾乎是我為試用AutoMapper添加的所有內容。 從概念上我可以看到它有多有用-我只需要弄清楚如何實現它,以便感激收到任何幫助/評論... :)
根據要求編輯 @Andrew-
結果類別:
public partial class Result
{
public int Div { get; set; }
public System.DateTime Date { get; set; }
public string HomeTeam { get; set; }
public string AwayTeam { get; set; }
public int FTHG { get; set; }
public int FTAG { get; set; }
public string FTR { get; set; }
}
ResultDTO類:
public class ResultDto
{
int Div { get; set; }
DateTime Date { get; set; }
string HomeTeam { get; set; }
string AwayTeam { get; set; }
int FTHG { get; set; }
int FTAG { get; set; }
string FTR { get; set; }
// Added tonight to try and get it to work
public ResultDto()
{
Div = 0;
Date = DateTime.Now;
HomeTeam = null;
AwayTeam = null;
FTHG = 0;
FTAG = 0;
FTR = null;
}
}
@stuartd,以下內容用於檢索從中獲取Result的ResultList:
// Produce a list of DataLayer.Result entities.
var ResultList = (from x in dbContext.Results.Local
where x.HomeTeam == team.TeamName.ToString() || x.AwayTeam == team.TeamName.ToString()
orderby x.Date
select x).ToList();
請注意,“ team.Teamname”是從外部來源傳遞到上面的-看起來工作正常。
總結一下-
希望這可以幫助!
默認情況下,除非另外指定,否則將類成員聲明為private
成員,因此ResultDto
屬性在類外部不可見。
public class ResultDto
{
int Div { get; set; }
....
}
需要是
public class ResultDto
{
public int Div { get; set; }
....
}
AutoMapper可以根據提供的參數計算出您正在映射的類型。 嘗試這個:
ResultDto resultDTO = Mapper.Map<ResultDto>(res);
更新這是錯誤的,或者至少沒有幫助。 我們需要查看注釋中提到的源類和目標類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.