2011-04-04 77 views
2

我正在處理自定義實體框架提供程序,並且需要爲此提供程序添加對默認列值的支持。當用戶使用實體框架嚮導並選擇一個包含具有默認值的列的表時,這些默認值不會被填充到實體設計器中。支持自定義實體框架提供程序中的默認列值

我有點迷失在這個人口應該發生的地方。我相信適當的地方將在DbXmlEnabledProviderManifest的GetEdmType方法覆蓋,但我不明白如何設置默認值,如果這是正確的地方。

有人有寫EF表提供支持表列默認值的EF提供者的經驗嗎?你如何實現這個?

回答

0

我對晚會有點遲,但DbXmlEnabledProviderManifest不適合添加默認值。提供程序清單描述了數據庫引擎本身的功能,並且對於此數據庫引擎而言是特定的(並且是通用的),而不是針對給定的數據庫和/或表。提供者清單中的默認值告訴EF如果用戶沒有提供給定列屬性將使用什麼值(例如,如果用戶用戶未指定小數列的比例或精度,則來自提供者清單的值將會用於此欄的比例和/或精度)。 如果您只想爲屬性插入默認值,最簡單的方法是將與實體中列對應的屬性設置爲構造函數中的該值。通過這種方式,用戶可以始終將其設置爲不同的值,但是如果他/她沒有將默認值發送到數據庫。對於某些情況下,數據庫中的某些列沒有實體的相應屬性,可以在SSDL中的Property元素上使用DefaultValue屬性,這會在添加行時插入到數據庫中。如果這些屬性不是空的,這是特別有用的,因爲沒有告訴EF應該插入什麼值,EF會嘗試插入null,這對於不可爲空的列顯然會失敗。