2012-04-12 58 views
0

我們是否同意在自動生成的POCO實體之上添加驗證屬性(如使用EF 4.x Dbcontext生成器模板)是沒有意義的?文本模板(如EF 4.x生成器)和pocos上的驗證屬性?

因爲每次運行該工具,屬性都會被擦除。

我的問題是:是否有辦法一方面維護自動生成的pocos實體,另一方面是驗證屬性?

看起來,這將是可能的代碼優先的方法?

其實我用數據庫的第一種方法開始我的項目,並自動生成我的POCO。是否有可能擺脫.tt文件,保留生成的pocos並使用代碼優先方法來管理新字段,驗證屬性(等等...)? POCO上的更改會更新我的數據庫表嗎?

非常感謝您的燈光。

回答

1

這裏有幾個問題。首先是你試圖將驗證屬性放在你的數據模型類上。這意味着你將數據對象直接傳遞給你的視圖。雖然這是有效的,但並不是推薦的方式。

您應該改爲只有任何給定視圖所需信息的視圖模型,而這些視圖模型具有您的驗證屬性。然後,在您的業務邏輯中,將視圖模型映射到數據模型。然而,如果你決定在你的視圖中使用你的數據模型,那麼你會使用所謂的「夥伴類」來爲元數據類添加校驗器。

http://hartzer.wordpress.com/2010/01/26/mvc-buddy-class/

最後,如果你想去代碼首先,你會發現,代碼第一次的作品非常不同於數據庫第一。儘管可以將生成的實體映射到Code First映射,但使用Entity Framework Power Tools CTP1將數據庫逆向工程化爲代碼優先模型會更容易,因爲這也會創建映射。

+0

我看了一下班級的好友和元數據。似乎非常有用,我可能會用它將它與代碼生成結合起來(如果我堅持這種方法)。感謝您抽出寶貴的時間。 – 2012-04-13 17:19:55

1

如果你真的在做「先編碼」的方法,那就意味着「代碼就是老闆」。您不應該反覆運行代碼生成器來更新代碼 - 您應該直接自行更新POCO。

當然,從項目開始時的數據庫生成代碼生成的POCO可能很有意義,可以節省大量工作。但不要打算繼續這樣做 - 你會遇到你提到的問題。

如果你想做一個「數據庫優先」的方法,在數據庫中進行修改,你的POCO將成爲次要的事情,重新生成 - 對於誰是「老闆」會產生困惑。 (如你所說)「保留生成的pocos並使用第一種方法管理新字段,驗證屬性(等等......)」。

至於「POCOs上的更改會更新我的數據庫表嗎?」 - 它不應該,除非你有一些設置重新生成數據庫。

注意:我來自NHibernate背景,而不是EF,但同樣的概念適用。

+0

我同意運行代碼生成器在開始反向工程DB時非常有用。然後,繼續依賴這個過程並不完全相關。 無論如何CodeFirst似乎應該重新生成數據庫。我必須挖掘這個功能。 – 2012-04-13 16:57:15

+1

@AntoineM - 代碼首先有幾種方法,其中一種是每次更改時重新生成數據庫。最近發佈的4.3版本具有所謂的「遷移」支持,並允許您生成腳本來修改數據庫而不是重新生成它。 – 2012-04-13 17:34:26