星期四, 7月 09, 2009

解決 Entity framework 對於 SQL 欄位的預設值

我們平常在設定 SQL 的 Table 時, 會將一些欄位直接用 SQL 的 default 處理掉, 例如 Datetime 會設定 getdate() 等..而在使用 Entity Framework 時我也是使用同一觀念去設計, 不過這裡卻遇到了問題, 就是在新增時會產生出錯誤..

SqlDateTime 溢位。必須在 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之間

奇怪了..我在 SQL 的 datetime 欄位有設定預設值阿, 怎麼會有這錯誤資訊, 查了一下找了一下, 發現問題了..簡單說如果你沒有告訴Entity Framework 你 Datetime 欄位的值, 它就給你插入SqlDateTime.Null, 所以就產生錯誤訊息了, 所以解決的方法就是去手動編輯EDM, 然後在需要使用 SQL 的 default 的欄位修改成下面這樣..

<Property Name="dtInsert" Type="datetime" Nullable="false" StoreGeneratedPattern ="Computed" />

這樣就可以解決問題了..

ps:上面那個屬性要設定在SSDL檔非CSDL..

參考:
http://social.msdn.microsoft.com/Forums/zh-TW/238/thread/192c885f-47c7-4cd1-8cd9-46913333c7eb
http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/96b53cf0-2a0a-459d-a26e-52486dc4fb1f/

1 則留言:

寵物展部落格 提到...
網誌管理員已經移除這則留言。