2010-05-04 49 views
0

我問這個,因爲我使用部分分類來擴展我的數據庫模型,並在這樣做了一些障礙,我已經遇到了使用繼承,並且阻礙我運行聲明我的數據庫模型在另一個類作爲屬性和只是像這樣使用它,即:Public Property DBModelClass as DBModelClassType - 然而,直接部分分類制定出最好的,沒有障礙...除了我似乎現在遇到的問題。ASP.NET MVC 2.0:對數據庫/對象模型使用部分分類或繼承?

也就是說,我在屬性刪除的'Get'部分中創建了具有半頁代碼的新屬性,這些屬性與db或db模型不應該知道的有關的虛擬/新屬性這種東西你生成/使用,但沒有保存在你的分貝,因爲我相信你們都有這些。每次我通過一個動作提交我的DBModel時,不管怎樣,這些屬性中的一個'Get'部分正在運行(被調用),即使我沒有問過它。當然,因爲它沒有準備好運行(它不應該)像返回空錯誤那樣的錯誤(但是,如果它只在我要求的時候運行,它們不會出錯)。

編輯: 是這樣,模型中的所有屬性從數據庫(LINQ to SQL中)或模型的狀態自動調用生成的我問題的第二部分?沒有被要求這樣做?

順便說一句:(我做了modelstate.isvalid - 然而,isValid方法被調用之前發生此運行,因爲它的錯誤之前,我甚至看到驗證信息)。那是,是自動調用所有屬性的數據庫模型對象,即使不使用正常?我嘗試使用bind(false)和scaffold關於有問題的屬性。

和我的問題的第一部分,就像一個提醒,是如果我應該或不應該使用部分分類作爲擴展db模型的繼承的替代品?謝謝。

+0

你用什麼方法訪問數據庫? LINQ到SQL?實體框架? – 2010-05-04 16:55:57

+1

我也建議您閱讀您的問題並簡化。它咕嚕咕嚕咕嚕,真的很難閱讀。 – 2010-05-04 16:56:34

+0

我使用Linq-to-sql。同樣,將重新編寫令人困惑的部分(我同意) – 2010-05-04 17:08:07

回答

3

你不應該修改你的域名,我會使用視圖模型建議您:

Controller -> Model -> Mapper -> View Model -> View 

定義視圖模型類,這將反映你的意見,而不是域模型。然後,您可以使用AutoMapper將您的控制器操縱的域對象轉換爲視圖模型,並將它們傳遞給相應的視圖。

This post在Jimmy Bogard的博客上也值得一讀。

+0

我不知道我明白你在說什麼。我有一個數據庫對象,如出售'產品'。供應商添加發布到某個操作的產品,該操作捕獲所需的位並將其保存在數據庫中並返回更新的視圖。在將新產品發送給操作時,如果沒有我實際調用它的後添加屬性的問題仍然存在。 – 2010-05-04 17:11:00

+0

啊,我現在得到了你,這是關於最佳做法 - 注意! 但是你必須將所有元素值從域模型設置到視圖模型,對嗎?每個元素一個接一個? (談論實際的實例值...)或自動映射器實時添加值以及不知何故? – 2010-05-19 06:19:20

+0

如果屬性具有相同的名稱,AutoMapper將自動匹配它們並設置它們的值。如果名稱不同,則需要對其進行配置。 – 2010-05-19 06:23:30