我使用ASP.NET MVC 3,Raven DB作爲後臺數據存儲。我有一組模型,我有興趣轉換成ViewModels。爲了做到這一點,我利用AutoMapper來處理將每個屬性映射到ViewModel中的相應屬性的骯髒工作。比方說,我有一個模型,如下所示:ASP.NET MVC模型與其他輔助實體的viewmodel映射
public class FooModel
{
public int Id { get; set; }
public string Name { get; set; }
public int AlphaId { get; set; }
public int BetaId { get; set; }
}
然後讓說,我想將其改造成一個ViewModel像這樣:
public class FooViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public int AlphaId { get; set; }
public Alpha Alpha { get; set; }
public int BetaId { get; set; }
public Beta Beta { get; set; }
}
我的地圖,然後建立這樣的應用程序啓動時:
Mapper.CreateMap<Foo, FooViewModel>();
然後,在控制器我執行地圖像這樣:
public ActionResult FooDetails(string id)
{
using(var session = this.documentStore.OpenSession())
{
var fooInstance = session.Load<Foo>(id);
var fooViewModel = Mapper.Map<FooViewModel>(fooInstance);
return this.View(fooViewModel);
}
}
問題是,正如您在上面看到的那樣,來自存儲庫的實體有兩個屬性,它們是Alpha和Beta類型的其他對象的關鍵字。我對基於AlphaId和BetaId鍵的Alpha和Beta感興趣。
起初我以爲我會利用AutoMapper的自定義轉換功能,但我不認爲這將工作,因爲我們需要將數據會話注入到映射中(以調用數據存儲以檢索Alpha或Beta對象)。
另一種選擇是隻做控制器操作中的所有工作,但這很快就會變得笨重(不是在給出的具體示例中,但這只是一個例子來說明這一點)。
Alpha和Beta的水合應該在哪裏發生,這裏有什麼好的模式?
我已經這樣做了,在查詢期間利用包含。你仍然必須打電話。然而,加上參考實體,讓我們陷入了原始的困境。 –
你可以看看建立在RavenDB之上的HibernatingRhinos的RacoonBlog應用程序,看看它們是如何管理這個的。這裏是一個[示例](https://github.com/ayende/RaccoonBlog/blob/master/RaccoonBlog.Web/Controllers/PostDetailsController.cs) –