2016-01-14 44 views
0

我仍然試圖學習MVC,現在我正在實際的世界網站中實現它,我提出了更多的問題。我目前的問題是關於如何使用ViewModel獲取數據進行編輯。正確使用ViewModel進行編輯?

的情況是,我有會員頁面,讓用戶改變自己的姓名,地址,電話,等我有某人在一個名爲Person表,並解決他們的地址信息的基本信息。所以,我創建了一個ViewModel,它基本上將兩者結合起來傳遞給View。

至於我可以告訴我要創建兩個表的對象,然後發送到瀏覽之前手動將它們合併成一個視圖模型。這似乎有點麻煩,我覺得他們可能是一個更好的方法來做到這一點。當我在網上搜索時,我似乎可以找到任何涵蓋此內容的內容。我找到的所有東西都是一個簡單的例子,其中有些人基本上直接從表格映射ViewModel。

這裏就是我基本上拿出。我是走在正確的道路上還是有更好的方法來做到這一點?

Person currentPerson = db.Person.Find(id); 
Address currentAddress = db.Address.Find(currentPerson.PID); 

MemberViewModel currentUser = new MemberViewModel(); 
currentUser.FirstName = currentPerson.FirstName; 
currentUser.LastName = currentPerson.LastName; 
currentUser.MemberId = currentPerson.PID; 
currentUser.Address = currentAddress.Address1; 
currentUser.City = currentAddress.City; 
+1

你的方法沒有問題。但也有諸如[automapper(http://automapper.org/)工具,使您的數據模型和視圖模型很容易就能 –

回答

1

爲什麼需要使用與數據庫模型非常相似的ViewModel有多個好理由。

  1. 如果您使用的是實體框架,最常見的業務對象來自實體框架數據庫對象。在MVC中,我們使用數據屬性驗證,如需要驗證等(System.ComponentModel)。但是,如果我們在Entityframework生成的類中使用這些驗證,並且如果我們更改數據庫並刷新類,那些自定義屬性將會丟失。

  2. 如果使用WCF或Web服務,自定義視圖模型類是重量輕轉,因爲DB對象有一樣東西與其他對象的關係。

  3. 視圖模型類提供了合併對象,並具有自定義字段的選項。 關於用戶,一個很好的例子就是用戶登錄。通常它涉及用戶名,密碼並記住我複選框。 「記住我」不是存儲在數據庫中的字段。但是要將View的值傳遞給Controller,我們可以使用像LoginUserViewModel這樣的對象,它具有用戶名,密碼並記住我。

當然,在檢索和保存數據時會涉及對象映射。 Automapper是這個工具。

+0

我我的搜索過程中讀了一些關於Automapper,但不知道如果是這樣的映射其他人通常使用的是什麼,或者如果手動映射更符合標準。 – Caverman

+0

如果您正在處理複雜的對象(發票,付款等),手動轉換很容易出錯,並且會產生嘈雜的代碼。 Automapper有助於保持代碼基礎清潔並進行轉換。我喜歡它。我不確定標準,但過去兩年來,我在不同的項目中使用了Automapper,這些項目非常適合我。 – Dhanuka777

+0

謝謝。我要研究Automapper。如果您有任何您知道的文章會指出我如何使用Automapper,請將它們一併傳遞。與此同時,我會通過谷歌搜索,也許YouTube來看看我能否找到一些東西。 – Caverman