- Published on
ASP.NET MVC - 使用資料庫開發 (三)
資料庫欄位有預設值時處理
先在 客戶資料
裡面加一個 建立時間
的欄位,Type 為 DateTime
,預設值為 getdate()
打開 EF
,在空白處按右鍵選擇 從資料庫更新模型
出現資料庫選擇的視窗後直接按 Finish
就好了
我們可以加入一個 使用 Entity 的 MVC 控制器 來測試
- 註:Controller name 記得不要打中文
因為新增時間為自動產生,所以在新增畫面把它拿掉
在 Controller 部份也要把 Bind 的 Include 的欄位拿掉
新增一筆資料測試
會發現網頁報錯了
- 註:錯誤訊息 (送出的值超出原本
datetime
的範圍,請改用datetime2
)
真的原因是 建立時間
欄位型態為 DateTime
而且是不可 null, 送到資料庫時,預設是帶 0001/01/01
, 而資料庫並沒有把欄位帶入 getdate()
的預設值, 而是傳入 0001/01/01
,所以才會導致出錯
- 註:SQL 2014 DateTime 的範圍為
1753 年 1 月 1 日到 9999 年 12 月 31 日
解決方法
打開 Entity,找到欄位後按 F4
,在 屬性
裡面找到 資料產生模式
,預設為 None
,改選為 Computed
, 修改後存檔重 Build
註:意思是 程式無論怎麼新增跟修改,EF 都不會更新到資料庫
MSDN 的說明
之後就可以測試新增時是否會帶入預設值 (現在時間), 編輯時是否不會修改到欄位
如果資料欄位很多預設值的話,用 XML
打開 EF
直接在 SSDL
的地方找到資料表的名稱和欄位, 直接加入程式碼就好了