背景: 我有200多個傳統的VB6應用程序,我將它們轉換爲C#,使用EntityFramework Core作爲我們的ORM。不幸的是,很多應用程序都使用MySQL的零日期(0000-00-00)
。所以我需要迎合這一點,並能夠以某種方式存儲零日期。改變在200多款應用程序中運行的基本方式目前不是一種選擇。使用EF核心處理MySQL零日期
設置: 我可以定義表示在MySQL 例如字段定義的實體屬性:
public DateTime ExpiryDate { get; set; }
...
entity.Property(e => e.ExpiryDate)
.IsRequired()
.HasColumnType("datetime")
.HasDefaultValueSql("'0000-00-00 00:00:00'");
這將正確地存儲,如果沒有值上插入發送的零日期。
問題: 因爲C#有0001-01-01
最小的日期是不可能讓我明確地存儲零日期。所以我的問題是......有沒有辦法設置我的實體來獲取這個零日期進出數據庫?
到目前爲止: 我一直在使用支持字段試過,定義爲一個字符串,這樣我可以操作任何DateTime.MinValue
成爲'0000-00-00'
。這使我能夠存儲零日期,但隨後導致鑄件的問題(如你所期望的)嘗試檢索數據時:
System.InvalidCastException:無法投 類型的對象「System.DateTime的」以鍵入'System.String'。我使用
當前套餐:
- EFCore 1.1
- PomeloEntityFrameWorkCore 1.1.2
- 的MySQL 5.7.18
問題:爲什麼當你想要一個零日期時該字段是必需的(並且可以爲空?)? – Stefan
對不起,我使用可空的日期時間與我的支持現場測試結合使用。現在編輯。 – Bandito
但問題仍然存在:該字段是必需的,但是默認使用默認的空日期。重點是;你是否使用這個空日期來確保所有新條目默認過期?或者,它只是將字段標記爲「未填充」的默認值。如果是後者,你可以允許「NULL」(即不要求),並進行相同類型的檢查來檢查字段的有效性。 – Stefan