我有一個視圖模型,看起來像這樣:ViewModel與另一個ViewModel的集合 - AutoMapper可以幫我嗎?
public class CreateReviewViewModel
{
public string Title { get; set; }
public decimal Score { get; set; }
public ICollection<RecommendationViewModel> Recommendations { get; set; }
}
因此,前兩個是基本的本地類型 - 容易。
第三個屬性是另一個視圖模型的集合:
public class RecommendationViewModel
{
public RecommendationType RecommendationType { get; set; }
public bool IsRecommendedFor { get; set; }
}
RecommendationType
是在我的域模型,其中有代表不同的「推薦」 byte
值的enum
。
在我[HttpGet]
動作,我這樣做:
var model = new CreateReviewViewModel
{
Recommendations = SomeMethodWhichLoopsThroughTheEnumMembersAndCreatesTheModel();
}
return View(model);
所以我最終的RecommendationViewModel
列表,與bool
屬性設置爲false
。
然後在我看來,我使用EditorTemplates:
@Html.EditorFor(model => model.Recommendations)
其中要求呈現爲兩個屬性標籤和複選框的自定義編輯模板。涼。
所以 - 有背景,希望有道理。
如何在[HttpPost]
操作中將該ViewModel映射到Review
域模型?
的Review
對象的部分看起來像這樣:
public class Review
{
public bool IsRecommendedForA { get; set; }
public bool IsRecommendedForB { get; set; }
// etc
}
我目前做的自定義映射關係是這樣的:
var review = new Review();
review.IsRecommendedForA = this.Recommendations.SingleOrDefault(x => x.RecommendationType == RecommendationType.A).IsRecommendedFor;
review.IsRecommendedForB = this.Recommendations.SingleOrDefault(x => x.RecommendationType == RecommendationType.B).IsRecommendedFor;
這是非常乏味的。
我可以使用AutoMapper完成上述任務嗎?
當然,我可以只需添加各種不同的RecommendationType的作爲視圖模型,而不是一個集合的基本屬性,但後來我查看的變得複雜,我無法使用EditorTemplates通過收集隱式循環 - 我將不得不爲每個屬性寫出Html.EditorFor
。
任何想法?
「評論」是使用實體框架來堅持我的表名爲「審查」,這是一個平坦的表POCO - 具有單一的扁平級別的所有這些領域是出於性能的考慮。 – RPM1984 2011-03-30 22:57:46