簡體   English   中英

自動映射器未從源填充目標

[英]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”是從外部來源傳遞到上面的-看起來工作正常。

總結一下-

  1. 我產生ResultList作為Result實體的列表。
  2. 用列表中的第一個實體填充結果。
  3. 嘗試將此Result實體映射到ResultDTO
  4. 失敗:(

希望這可以幫助!

默認情況下,除非另外指定,否則將類成員聲明為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM