2017-08-06 108 views
1

存儲日期每當我試圖創建一個新用戶的CreateAsync拋出一個異常,其中的InnerException是: "The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.\r\nThe statement has been terminated." 此錯誤打開了超過100個類似的查詢,但大多比較據我所知,與我的情況相關的是老的和沒有的。 中的SQLExpress數據庫的字段定義爲無法在身份DB asp.net核心和EF

[DOB] [datetime] NULL, 

起初我試圖存儲在「ApplicationUser」模式有效的20世紀的日期。該字段在模型中定義:

 [Required)] 
     public DateTime DOB { get; set; } 

我讀了這個問題的原因,許多文章和無法找到一個解決方案,因此要想繼續發展,我決定只是忽略它暫時和將該字段設置爲空並繼續。所以我改變了定義ApplicationUser

 [Column("DOB",TypeName = "datetime")] 
     public Nullable<DateTime> DOB { get; set; } 

,並在控制器將其設置爲null硬編碼的值忽略所提供的值。但問題依然存在。問題可能是什麼?

任何幫助非常感謝。

+0

您是否嘗試過流利的api? –

+0

我不確定你的意思。除了在Startup中配置服務以使用SQL和Identity之外,我創建的唯一其他東西是'ApplicationUser',它擴展了'IdentityUser'。其他的一切都由UserManager管理。我確實想知道Identity使用EF的定義文件在哪裏,但我認爲所有這些都是自動發生的。我應該直接指出'ApplicationUser'的字段存儲在數據庫中的位置嗎?除了這個日期之外,它似乎已經很好地完成了所有這一切。 –

+0

我的意思是,如果你試圖用你的實體爲身份DbContext添加配置並且流利的api –

回答

1

我打算前往微軟並找到SQL團隊並安排公開執行。人們需要學會做出適當的錯誤信息。

因爲我正在測試並在數據庫中插入出生日期,我只是假定datetime2到datetime的轉換是指DOB字段。但是,當然,錯誤消息中未提及受影響的列。

正如它發生的那樣,數據庫中有另一個日期,JoinDate,它是由帳戶創建時由控制器添加的,它是這個字段是問題所在。當然,這是我的錯誤 - 我應該初始化該字段,但是如果錯誤消息包含列名,我將在幾秒鐘內修復它,而不是幾天。

這就像那些說「無法打開指定文件」但其中指定的文件永遠不會被命名的錯誤消息。

</rant>

+0

你沒有解決我的問題。我的問題實際上完全不相關。但我有一個很好的笑,所以我投了這個:-) – Wndrr