我用AutoMapper將class Foo映射到class Bar。 Bar是Foo的ViewModel。 Bar具有更少的屬性,但它具有的所有屬性都與相應的Foo屬性完全匹配,除了Bar在Foo中不存在的其中一個屬性上具有自定義驗證屬性。如何在使用AutoMapper時跳過自定義驗證屬性?
public class Foo
{
string Prop1 { get; set; }
string Prop2 { get; set; }
string Prop3 { get; set; }
string Prop4 { get; set; }
string Prop5 { get; set; }
}
public class Bar
{
string Prop1 { get; set; }
string Prop2 { get; set; }
[CustomValidation]
string Prop3 { get; set; }
}
我想使用AutoMapper映射一個富到酒吧,但我不希望當映射恰好是運行「CustomValidation」屬性。
這是我的映射代碼看起來像......
Mapper.Initialize(cfg => cfg.CreateMap<Foo, Bar>(MemberList.None)
.ForMember("Prop3", m => m.Ignore()));
即使在MemberList.None在和的Prop3被明確忽略傳遞...它仍是起火的CustomValidation屬性。
我該如何阻止它這樣做?
或可替代...
我能火與非默認構造函數的CustomValidation屬性?
把這個相當奇怪的問題放在上下文中。我試圖單元測試一個執行這個映射的Controller方法。 CustomValidation屬性命中數據庫,我想避免這種情況來加速單元測試。我確實已將CustomValidation屬性設置爲在構造函數中接受IoC容器,這將允許我傳入模型並避開數據庫,這將是完全避免驗證的完美替代解決方案。
自定義驗證屬性已經接受IoC容器作爲構造參數,以便我可以用模擬庫進行單元測試。當我單獨測試自定義驗證屬性時,這很好。 問題是,我試圖單元測試一個控制器方法,它自己正在執行從模型到ViewModel的AutoMapper映射,並且ViewModel包含自定義驗證屬性。 我可以將IoC容器傳入控制器,並分別傳遞到自定義屬性中,但看起來並不是通過AutoMapper從控制器傳遞給屬性。 – spoonraker
好吧我現在明白了。但是,我們清楚地知道,你正在談論設定模型tate的價值的驗證。有效,對嗎?如果是的話,你怎麼扼殺它?粘貼該代碼將幫助我幫助你。 –
* ModelState.IsValid –