2013-10-19 110 views
2

我試圖使用AutoMapper和它完美的作品,除了INT性質,因爲它只是取代了場0AutoMapper地圖詮釋

代碼:

public class Employee 
{ 
    public int E1 { get; set; } 
    public int E2 { get; set; } 
} 

Mapper.CreateMap<Employee, Employee>().ForAllMembers(opt => opt.Condition(srs => !srs.IsSourceValueNull)); 

Employee e1 = new Employee {E1 = 7}; 
Employee e2 = new Employee {E2 = 78}; 

Mapper.Map(e2, e1); 

// //結果E1 = 0,E2 = 78 ....它是否應該只映射E2和 離開E1,因爲我沒有初始化它?

回答

1

自動映射器似乎將零設置爲未初始化的整數屬性。所以你看到目標對象的E1是零(0)。 E2已被正確映射。

我試着設置AutoMapper忽略未初始化的屬性,它給了我想要的結果。

 [TestMethod] 
     public void Test() 
     { 
      Employee e1 = new Employee { E1 = 7 }; 
      Employee e2 = new Employee { E2 = 78 }; 

      Mapper.CreateMap<Employee, Employee>().ForMember(x => x.E1, x => x.Ignore()); 
      var de1 = Mapper.Map<Employee, Employee>(e2, e1); 

      //de1.E1 is 7.    

     } 
2

在C#integersvalue types /數字結構。每個值類型都有一個默認的默認構造函數,用於初始化該類型的默認值。 integers的默認值爲zero。所以即使你沒有在你的代碼中明確地初始化它們,默認的構造函數也會將它設置爲零。

所以用這個信息員工的屬性值:

E1 { E1 = 7, E2 = 0 }

E2 { E1 = 0, E2 = 78 }

現在,當你映射e2E1(這是故意做?)E1將變爲:

E1 { E1 = 0, E2 = 78 }

所以,你的代碼工作完全正常。由於值類型不能爲null,除非它們被裝箱,否則您的條件將始終返回true。