2014-11-04 31 views
5

我使用AutoMapper項目如下結構AutoMapper項目嵌套的對象,其中內部對象爲空失敗

public class OuterSource 
{ 
    .... 
    public Guid? InnerId { get; set } 
    public InnerSource Inner { get; set; } 
} 

public class InnerSource 
{ 
    public Guid Id { get; set; } 
    public DateTime Date { get; set; } 
} 

public class OuterDest 
{ 
    .... 
    public InnerDest Inner { get; set; } 
} 

public class InnerDest 
{ 
    public Guid Id { get; set; } 
    public DateTime Date { get; set; } 
} 


var result = AutoMapper.Project<OuterSource, OuterDest>(query); 

正如你可以看到,內部對象爲空。

如果Inner對象有一個值,則投影工作正常,但如果Inner對象爲null,EF將拋出一個Exception,就好像它不知道InnerDest實際上應該爲null。

"The cast to value type 'Guid' failed because the materialized value is null. Either the result type's generic parameter or the query must use a nullable type." 

使用

var result = AutoMapper.Map<IEnumerable<OuterSource>, IEnumerable<OuterDest>>(query); 

沒有解決我的問題,但很明顯,我更喜歡使用的項目。

有沒有什麼好的解決方法,或者我可以簡單地不使用.Project嵌套映射與可爲空的內部對象?

回答

0

問題是您的源對象具有可爲空的字段,而您的目標對象沒有。如果某個屬性不可爲空,並且您嘗試將其設置爲空,則會發生異常。要解決它,你有2個選項。要麼使字段中的目的地爲空的

public class OuterDest 
{ 
    public Guid? Id { get; set; } 
    public DateTime Date { get; set; } 
} 

或者在您映射到處理空值和設定的默認值有問題的領域創建一個自定義處理程序。

0

什麼是您的映射配置?您需要單獨映射outsource => outerdest和innersource => innerdest,以便映射被理解。