2009-10-10 57 views
1

我使用NerdDinner作爲我的第一個MVC/LINQ to SQL項目的指南。它討論了當View需要來自多個來源的數據時ViewModel模式的使用 - 在他們的例子中:Dinners和Countries(用作下拉列表)。這是ViewModel模式的正確用法嗎?

在我的應用程序中,問題有點不同。它沒有太多不同的數據,而是通過關鍵約束鏈接的數據。我有一個通過UserId鍵鏈接到aspnet_users的故事表。我想要輕鬆訪問每個故事的用戶名。

由於我在某些情況下使用存儲庫模式並返回IQueryable進行延遲執行,因此我正在努力使用正確的方式來調整數據。所以我現在使用這個VideModel模式來使它工作,但不知道它是否正確。

而不是回到IQueryable故事(這將不起作用,因爲我需要UserName),我返回一個新的自定義類UserStory,它具有一個Story屬性和一個字符串用戶名屬性。

你的想法是什麼?

回答

0

如果你看一下Kigg,你會發現它們關於與初始模型亂來創建自定義的ViewModels。這是NerdDinner沒有詳細介紹的內容。您可以創建一個從Stories中繼承的StoriesWithUserName類,但添加了一個新屬性 - UserName。然後您返回到您查看這將自IEnumerable < StoriesWithUserName繼承>

[編輯]

哎呀。沒有發現,你已經這樣做:o)

1

看起來您的問題似乎與MVC有關,因爲它只是一個關於如何根據用戶名字符串訪問故事數據的問題。

是否可以使用所有的UserStory數據,用戶名和userid在數據庫中創建一個視圖?這樣,您可以根據您擁有的用戶名從視圖中進行選擇。

要創建視圖,您只需根據用戶標識在用戶表和userstory表之間進行聯接。

之後,仍然可以在返回的IQueryable中使用存儲庫模式。

如果您想更新,那麼做起來很簡單,因爲您仍然擁有用戶標識,並且能夠鏈接回需要更新的實際表。

+0

我得到絆倒,因爲最初我回來了一個IQueryable的故事,但拉用戶名不再使這個故事,我得到了匿名的故事鑄造錯誤。 – Mike 2009-10-10 13:56:29

0

使用存儲庫模式並返回一個IQueryable的故事很好。關係允許您訪問的用戶名值這樣的事情>>

假設你正在返回的IQueryable您的模型對象:

foreach(Story story in Model.Stories) 
{ 
    // do something with the value 
    response.write(story.aspnet_user.UserName); 
}; 

你的版本庫的方法是這樣的:

public List<Stories> GetStories(Guid UserId) 
{ 
    return datacontext.Stories.Where(u => u.UserId = UserId).ToList(); 
} 

該關係將自動爲您提供訪問我首次提到的foreach循環中的UserName值。沒有更多是必需的。

我不知道爲什麼你的分頁控制失敗的Count()雖然??

希望這有助於

+0

這個問題源於我在網上找到的分頁控制,我正在使用。當我剛剛返回故事的IQueryable(減去用戶名)時,它就好了。然而,在嘗試你的方法後,應用程序在分頁幫助程序執行source.Count()時在運行時被轟炸。我不完全理解匿名類型/ linq,知道它爲什麼這樣做。但是,我通過創建UserStory類並回避IQueryable UserStory來避免這種錯誤......爲什麼會發生這種情況? – Mike 2009-10-10 16:04:33

相關問題