2013-01-10 96 views
5

跳過性質我有以下類中定義:Automapper正確映射在第一次呼叫,但在第二個呼叫

public class ImageIndexModel { 
    public string Description {get; set;} 
    public string InstrumentNumber {get; set;} 
} 

public class ImageEditModel : ImageIndexModel { 
    public int TotalCount = 0; 
} 

public class Clerk { //This is actually a class defined by LinqToSql 
    public string Description {get; set;} 
    public string InstrumentNo {get; set;} 
} 

現在,在我的global.asax,我在Application_Start()定義下面的映射。

Mapper.CreateMap<ImageIndexModel, Clerk>() 
    .ForMember(dest => dest.InstrumentNo, 
       opt => opt.MapFrom(src => src.InstrumentNumber)); 

最後,在我的控制器之一,我有以下代碼:

var _existing = new Clerk(); 
var _default = new ImageEditModel() { 
       InstrumentNumber = "12345678", Description = "Test" 
       }; 
Mapper.Map(_default, _existing); 

我第一次打電話給我控制器上的行動,這映射運行時,一切工作正常和InstrumentNumber正確映射到Clerk對象的InstrumentNo。但是,第二次操作被調用時,InstrumentNo未被映射。 InstrumentNumber肯定有一個值,但InstrumentNo保持爲空。

任何想法可能發生在這裏?

+2

即使在多次運行時,您輸入問題的代碼也能正常工作。所以Automapper似乎不是問題。我懷疑Linq2SQL生成的類或者它在ASP.NET中使用的方式。沒有更多的代碼,它很難說出什麼是錯的。我會在linq2sql生成的類的屬性setter中設置斷點。 – PatrickSteele

回答

1

我曾經有過相反的問題,那裏發生了太多的映射。它通過調用mapper.reset()來解決,如here for potentially other reasons所述。也許在你的應用程序中有其他的東西將你的映射器從你的下面重新設置,這樣它就不再解析你認爲它應該的映射了(並且很短的時間)?另一個問題的關鍵是Automapper是單身人士,所以你的代碼的另一部分可能會加載或遲到綁定和污染你不知道。

+0

感謝您的幫助。 – RHarris