2016-08-24 98 views
0
Mapper.Initialize(cfg => 
{ 
    cfg.CreateMap<ObjectDTO, Object>().ForMember(obj => obj.LastUpdateDate, opt => 
     opt.Condition(pre => pre.LastUpdateDate != null)); 
} 

obj.LastUpdateDate = Datetime.Now; 
Mapper.map(objDTO,obj); 

映射後obj.LastUpdateDate將成爲空儘管我創建的條件。AutoMapper儘管條件不會忽略空屬性

發生在對象的所有成員上。

Automapper 5.02

回答

3

你肯定LastUpdateDatenullDatetime有一個默認值,所以如果你不明確將它設置爲null你的條件將無法捕捉它。

嘗試:

cfg.CreateMap<ObjectDTO, Object>() 
     .ForMember(dest => dest.LastUpdateDate, opt => opt.Condition(c => c.LastUpdateDate != null && c.LastUpdateDate != default(DateTime))); 

編輯:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Mapper.Initialize(cfg => 
     { 
      cfg.CreateMap<ObjectDTO, Object>() 
       .ForMember(dest => dest.Number, opt => opt.Condition(src => src.Number.HasValue)) 
       .ForMember(dest => dest.LastUpdateDate, opt => opt.Condition(src => src.LastUpdateDate.HasValue)); 

     }); 

     Mapper.AssertConfigurationIsValid(); 

     var source = new ObjectDTO { LastUpdateDate = DateTime.Now }; 
     var destination = new Object { Number = 10, LastUpdateDate = DateTime.Now.AddDays(-10) }; 
     var result = Mapper.Map(source, destination); 
    } 
} 

public class ObjectDTO 
{ 
    public int? Number { get; set; } 
    public DateTime? LastUpdateDate { get; set; } 

} 

public class Object 
{ 
    public int? Number { get; set; } 
    public DateTime? LastUpdateDate { get; set; } 
} 
+0

謝謝,但不是,這是一個可以空的日期時間,反正它不適用於任何其他財產 –

+0

啊好吧。你能發佈一個更完整的例子嗎?讓我們看看Object和ObjectDTO類以及源和目標對象中的內容。沒有更多的信息很難說,但我更新了我的答案,我認爲做你想做的事。 – MisterIsaak

0

條件是對象上,而不是在目的地。

更好的命名

所以變量你說:

.ForMember(dest => dest.LastUpdateDate, opt => opt.Condition(src => src.LastUpdateDate != null)); 

那麼,什麼是你objDTO?

+0

是的,我知道條件是在源對象上,這是我想要做的 使我的DTO與我的數據庫對象合併,然後更新數據庫, 但我不想重寫null DTO到DB對象, DTO是一個數據傳輸對象btw, 我用它在Common Library中爲所有解決方案確認 –