2011-05-04 55 views
6

我有一個看起來像這樣的代碼:顯示名稱型號上使用實體框架

public class MyModel 
{ 
    [Required] 
    [Display(Name = "labelForName", ResourceType = typeof(Resources.Resources))] 
    public string name{ get; set; } 
} 

的問題是屬性顯示和要求都在生成的模型類實體框架中被添加。我知道我可以使用Partial添加功能,但是如何將屬性添加到將使用ORM擦除和更新的類?

+0

「但是如何將屬性添加到將使用ORM擦除和更新的類?」你爲什麼想這麼做?你在說改變T4模板嗎?自動生成的文件已經是您項目的一部分,所以您可以輕鬆地進入並更改它們(從長遠來看,這是毫無意義的) – 2011-05-04 20:21:58

+0

因爲我有一個multilangage wensite。 – 2011-05-04 20:23:55

+0

我的問題是你爲什麼要修改一個文件,如果你重新生成文件,你知道它將清除所有的更改?在部分中修改或修改T4模板。 – 2011-05-04 20:25:06

回答

8

根據我的經驗,數據庫中的模型很少與網頁中使用的模型相同。你總是需要某種改變。因此使用ViewModel s。另一個好處是,如果實體模型發生變化,所有使用ViewModel的網頁都不會中斷。

至於安全性,如果你有一個public ActionResult Save(MyEntityModel model)可能導致安全漏洞,因爲用戶可以弄清楚如何張貼值不應該被改變性質(如RoleStatusIsAdmin或其他)。

讓自己熟悉映射器(如automapper),然後將屬性放在ViewModel上。

+0

我觀看了有關AutoMapper的截屏視頻,我發現它可以做東西方法但不添加屬性。我錯了嗎? – 2011-05-05 14:33:01

+0

對不起,我有點不清楚。 Automapper只是將您的實體信息複製到您的ViewModel。您必須手動將屬性添加到您的視圖模型。 – jgauffin 2011-05-05 14:38:42

+0

是的,但因爲AutoMapper只是這樣做:OrderDto dto = Mapper.Map (order);我無法將OrderDTO的某些屬性添加到[Display(...)]之類的方法中。 – 2011-05-05 14:52:35

3

你有沒有考慮T4模板來修改生成的代碼。

http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx

我傾向於生成碼處理時使用T4模板與部分類的組合。

+0

我正在讀它,不想讓它太複雜。我可能會嘗試找到一個更簡單的方法。 – 2011-05-04 20:43:01

+0

有一個學習曲線,但它的價值。在codeplex上有一個用於MVC應用程序的強大模板。 Digg通過那裏的例子確定你會發現一些有用的金塊。 http://mvccontrib.codeplex.com/wikipage?title=T4MVC如果你想我可以寫你和如何修改屬性的例子。 – Thomas 2011-05-04 20:45:36