我有一種情況,從第二次調用和後續調用(Ajax GET調用)開始,AutoMapper
正在重用之前的值(第一次調用的值來自操作鏈接中的單擊)。它就像一個「緩存」的問題......AutoMapper UseValue,ResolveUsing或MapFrom重用先前調用的值。它是緩存還是什麼?
public virtual ActionResult List(int assessmentId, int? chapterId, bool? isMenuClick)
{
Mapper.CreateMap<Element, AssessmentQuestionViewModel>().
ForMember(dest => dest.AssessmentId, opt => opt.MapFrom(e => assessmentId));
...
}
,如果我在上面opt =>
拉姆達使用UseValue
,ResolveUsing
或MapFrom
沒關係。行爲是相同的,也就是說,它重用了以前調用的值。
AssessmentId
屬性在源類型中不存在(Element
)。通過這種方式,我嘗試將AssessmentId
的值指定爲「可能」在隨後調用具有此代碼的方法期間動態更改的值。 assessmentId
是我的ASP.NET MVC操作方法中的一個參數,如上面在方法簽名中所示。
然後我把這個代碼在List
操作方法:
var questions =
Mapper.Map<IEnumerable<Element>, IEnumerable<AssessmentQuestionViewModel>>
(Database.Elements.Where(e => !elementIds.Contains(e.ElementId) &&
e.Standard.ChapterId == chapterId));
第一次,questions
是確定的,那就是,所有AssessmentQuestionViewModel
對象具有AssessmentId
屬性設置正確按規定的CreateMap
。
從第二個呼叫開始,它重新使用第一個呼叫的assessmentId
,並將它與我的業務邏輯,因爲我希望它映射到AssessmentId
更新assessmentId
多數民衆贊成被作爲參數傳遞給List
方法傳遞攪亂。
可以肯定的是:我在代碼中設置了一個斷點,我可以看到assessmentId
參數的值是正確的。這只是返回的映射對象questions
在AssessmentId
屬性中具有錯誤的值 - 與當前assessmentId
值不同的值。因爲我要求AutoMapper使用當前值進行映射,所以值應該相等。
我有AutoMapper 2.2.1-ci9000(預發佈),但我測試了這個與以前的版本,我看到了這種相同的行爲。我更新了預發行版,認爲這種「不當行爲」將會消失。
我認爲這是一個錯誤。如果我錯了,或者我嘗試以不支持的方式使用它,請糾正我。 :)
CreateMap應該爲每個AppDomain調用一次 - 不在您的控制器操作中。這不是它被緩存 - 而是它不會被重新配置。單。時間。 –
@JimmyBogard所以在我的具體情況下,我應該遵循什麼樣的路徑?每次調用操作方法時,我都必須在目標對象中手動設置該特定屬性?現在我用一個簡單的'foreach' ... –