問題 看起來像條件被忽略。這是我的情景:自動映射器的狀態被忽略
源類
public class Source
{
public IEnumerable<Enum1> Prop1{ get; set; }
public IEnumerable<Enum2> Prop2{ get; set; }
public IEnumerable<Enum3> Prop3{ get; set; }
}
從一個字節的枚舉子類,然後用[標誌]裝飾。目標類只包含Enum1,Enum2和Enum3等屬性,包含「總」位值。所以在本質上,如果Enumeration包含Enum1.value!,Enum1.Value2和Enum1.Value3,則目標將包含Enum1.Value1 | Enum1.Value2 |當內屬性非空值和映射成功和正確地設定目的地Enum1.Value3
目的類
public Enum1 Prop1 { get; set; }
public Enum2 Prop2 { get; set; }
public Enum3 Prop3 { get; set; }
AutoMapper映射
Mapper.CreateMap<Source, Destination>()
.ForMember(m => m.Prop1, o =>
{
o.Condition(c => !c.IsSourceValueNull);
o.MapFrom(f => f.Prop1.Aggregate((current, next) => current | next));
})
.ForMember(m => m.Prop2, o =>
{
o.Condition(c => !c.IsSourceValueNull);
o.MapFrom(f => f.Prop2.Aggregate((current, next) => current | next));
})
.ForMember(m => m.Prop3, o =>
{
o.Condition(c => !c.IsSourceValueNull);
o.MapFrom(f => f.Prop3.Aggregate((current, next) => current | next));
});
映射工作正常。但是,當成員源值爲空(當Prop1爲null時,則跳過映射)時,我想跳過映射。
我可以從調試中看到Source.Prop1爲空。條件完全被忽略,並得到異常說值爲空。
Trying to map Source to Destination. Destination property: Prop1. Exception of type 'AutoMapper.AutoMapperMappingException' was thrown. --> Value cannot be null. Parameter name: source
我不確定是否IsSourceValueNull檢查Prop1或實際的Source類不是null。只有成員Prop1爲空。
任何幫助isappreciated。
謝謝帕特里克。通過分離出來,我可以得到完全相同的例外。 – TimJohnson
我以爲我以前做過。一種可能的情況是,c.IsSourceValueNull可能表示整個要映射的源對象是否爲空。我想知道它應該是「c => c.Prop1!= null」? – PatrickSteele
使用「條件」找不到代碼示例。抱歉。我想你總是可以這樣做:o.MapFrom(f => f.Prop1 == null?null:f.Prop1.Aggregate(...)) – PatrickSteele