2012-02-09 31 views
1

因此,我有一個數據庫完整的產品具有屬性,這些屬性具有值。我需要能夠將它重新創建爲一個可以用作視圖模型的C#對象。帶有驗證的動態視圖模型

所以基本上我需要能夠把我在數據庫中有這個:

public class Product 
{ 
    public object Attribute { get; set; } 
} 

我猜我將不得不使用反射或表達式樹這一點,但我不當然。我還需要在每個屬性中包含驗證。我正在考慮使用名爲Clay的框架來完成此操作,但我不知道是否能夠獲得驗證和/或能夠將此視圖模型返回給控制器。

任何想法?

編輯:謝謝大家的回答,但我一定還沒有明確說明我在尋找我的錯。我正在研究使用DynamicObject從數據庫中創建對象。我只是不確定如何使用DynamicObject在運行時創建DataAnnotations。

+1

[Entity Framework?](http://msdn.microsoft.com/zh-cn/library/bb399572(v = vs.110).aspx) – LiquidPony 2012-02-09 02:16:30

回答

0

如果您使用的是MVC3,那麼我看到完成的典型方法是使用Entity Framework和Unobtrusive Javascript/DataAnnotations進行驗證。

Validation教程

MVC3 + EF4教程

1

瑞安,

按LiquidPony的評論,我會拉實體框架混進去。有多種使用EF的入口點,首先是數據庫,Model-First或Code-First。爲了您的目的,數據庫首先是最合適的。基本上,您只需將edmx設計器畫布指向您的db連接,然後將需要的表拖放到表面上即可。然後創建所需的實體類,這些實體類可以使用linq在服務層/控制器中使用。

這裏的美是你所有的外鍵關係都能正確表示,你可以相對容易地訪問子集合等。

在使用EF之前,我確實使用了T4模板和反射來輸出我的數據庫映射類,而且這是一個'成功',它也是一個持續的維護噩夢,因爲我必須記得添加新的屬性,如果數據庫隨着EF,你只需按'刷新',這一切都爲你完成。現在,如果這是一個綠地項目,你可以更進一步,使用EF Code-First。這使您可以手動創建您的域模型,並根據模型的要求生成db。這在創建設計爲較大系統一部分的獨立組件的領域內具有真正的優勢。

請參見:

Code-first vs Model/Database-first

和:

http://blogs.msdn.com/b/adonet/archive/2011/03/15/ef-4-1-model-amp-database-first-walkthrough.aspx

每種方法的很好總結。

希望這給了一些見解。