2015-10-06 60 views
1

我有以下類AutoMapper未能上雙

public class EstimationDTO 
{ 
    public EstimationDTO() { } 
    public EstimationDTO(double best, double mostLikely, double worst) 
    { 
     this.BestEffort = best; 
     this.MostLikelyEffort = mostLikely; 
     this.WorstEffort = worst; 
    } 
    public double BestEffort { get; set; } 
    public double MostLikelyEffort { get; set; } 
    public double WorstEffort { get; set; } 
} 
public class Estimation 
{ 
    public Estimation() { } 
    public Estimation(double best, double mostLikely, double worst) 
    { 
     this.BestEffort = best; 
     this.MostLikelyEffort = mostLikely; 
     this.WorstEffort = worst; 
    } 
    public double BestEffort { get; set; } 
    public double MostLikelyEffort { get; set; } 
    public double WorstEffort { get; set; } 
} 

而且我有以下AutoMapper配置

Mapper.CreateMap<EstimationDTO, Estimation>(); 
Mapper.CreateMap<Estimation, EstimationDTO>(); 

當我嘗試兩個,即

var x = Mapper.Map<EstimationDTO>(new Estimation{ BestEffort = 0.1, MostLikelyEffort = 0.2, WorstEffort = 0.3 }); 

之間的轉換automapper會引發以下錯誤:

AutoMapper.AutoMapperMappingException: Missing type map configuration or unsupported mapping. 

Mapping types: 
Estimation -> Double 

(注意,如果我嘗試反向轉換,它會引發同樣的錯誤)。
我試圖做顯式映射的屬性,但是這並沒有解決問題。

如果我指定的雙轉換

Mapper.CreateMap<EstimationDTO, double>(); 
Mapper.CreateMap<Estimation, double>(); 

它的工作原理和正常兩種類型之間的轉換。

我該如何爲類指定這個特定的轉換?

+0

@DavidL我只是將相關的代碼複製到一個新的項目中,測試並得到了錯誤。我想我發現了一些與這個問題有關的問題 - 這兩個對象有定義的構造函數。我已經用構造函數更新了這個問題。 –

+0

這是缺少的鏈接:)。我已經爲你添加了一個答案。 –

回答

2

使用構造函數參數時,需要創建顯式映射,用.ConstructUsing()(此示例在版本4.0.4中)概述那些構造函數參數。

void Main() 
{ 
    Mapper.CreateMap<EstimationDTO, Estimation>() 
     .ConstructUsing(
      (Func<EstimationDTO, Estimation>)(x => new Estimation(0.1, 0.2, 0.3))); 

    Mapper.CreateMap<Estimation, EstimationDTO>() 
     .ConstructUsing(
      (Func<Estimation, EstimationDTO>)(x => new EstimationDTO(0.1, 0.2, 0.3))); 

    var mapped = Mapper.Map<EstimationDTO>(
     new Estimation{ BestEffort = 0.1, MostLikelyEffort = 0.2, WorstEffort = 0.3 }); 

    mapped.Dump(); 
} 
+0

一定錯過了doco這樣的魅力。謝謝你:) –

+0

@BradZacher樂於幫忙! –