2013-02-06 130 views
4

我在SQL表,該表中的我有時間列與GETDATE()實體框架和默認日期

的默認值在實體框架,我想它使用SQL日期時間,而不是使用控制檯應用程序運行的計算機的本地日期時間(SQL服務器在後面1小時)。

列不允許空值或者,目前它通過在1/1/0001日期值和我得到一個錯誤:

一個DATETIME2數據類型到datetime數據類型的轉換導致的超出範圍的值。\ r \ n聲明已終止。

謝謝!

+1

能否請您分享您的代碼? – spajce

+0

必須避免EF將日期發送到數據庫,以避免DB中的GetDate()值被覆蓋。搜索'DatabaseGenerated'或'StoreGeneratedPattern'(取決於您正在使用的EF版本)和'Computed'以查找正確方向的指示。 – Slauma

回答

17
  1. 打開EDMX設計師
  2. 選擇DateTime列
  3. 轉到屬性,並從None改變StoreGeneratedPatternComputed

會告訴EF不是該列中插入值,從而列將獲得由數據庫生成的默認值。請記住,你將無法傳遞一些價值。

+3

爲什麼EF默認不提供此功能?在數據庫中 - 第一種情況在重新創建模型時很難保持。 –

1

在OnModelCreating方法中爲該實體設置columnType: modelBuilder.Entity()。Property(s => s.ColumnName).HasColumnType(「datetime2」);

1

如果您使用流利的API,只需添加到您的DbContext類:

 modelBuilder.Entity<EntityName>() 
      .Property(p => p.PropertyName) 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);