2014-09-13 42 views
0

我有以下兩類:AutoMapper不更新可空的long?爲null

public class DomainStudent { 
    public long Id { get; set; } 
    public string AdvisorId { get; set; } 
    public long? DegreeId { get; set; } 
} 

public class ApiStudent { 
    public long Id { get; set; } 
    public long AdvisorName { get; set; } 
    public long? DegreeId { get; set; } 
} 

當我運行下面的映射:

Mapper.CreateMap<ApiStudent, DomainStudent>(); 

var api = new ApiStudent(); 
api.Id = 123; 
api.AdvisorName = "Homer Simpson"; 
api.DegreeId = null; 

var domain = new DomainStudent(); 
domain.Id = 123; 
domain.AdvisorName = "Marge Simpson"; 
domain.DegreeId = 5; // i want this to get written to null 

Mapper.Map(api, domain); 
// at this point domain.DegreeId = 5 instead of null 

我還以爲在默認情況下這個工作。我錯過了什麼嗎?

+1

這個工作對我來說,見[這個例子](https://dotnetfiddle.net/ueN8Nv) – 2014-09-13 19:08:17

回答

4

默認情況下,automapper將忽略空值的源值。

您可以通過以下更改此:

Mapper.Initialize(Conf => 
    { 
    Conf.ForSourceType<ApiStudent>().AllowNullDestinationValues = true; 
    }); 

否則,你可以嘗試:

Mapper.CreateMap<long?, long?>() 
    .ConvertUsing(v => v); 

很醜的黑客攻擊,不得不做這樣的事情,但它可能工作。

編輯:只是爲了清楚起見,我想指出的最終解決問題是upgrading to AutoMapper version 3.2.1

+0

感謝您的回答...我已經嘗試過,而且不管用不信。 – 2014-09-13 14:01:52

+0

,它肯定處於被擊中的位置?對不起,沒有任何其他想法:( – 2014-09-13 14:03:23

+0

是的,我正在使用每個屬性上的反射進行檢查,以確保它們全部匹配。第二個建議確實有效,但這似乎是我的影響其餘我的應用程序的方式,我可能不想要。是否有一個原因,這只是開箱無法正常工作?似乎所有我在這裏要求的是默認行爲。 – 2014-09-13 14:08:34

相關問題