升級到 .net6.0 版本后保存 10 位十進制值 - 例如 - 1234567890.12345,出現此錯誤:
OverflowException:轉換溢位
請建議如何修復此錯誤。
保存時在線上出現此錯誤:
dbcontext.SaveChanges()
在資料庫中,該Value列定義為DECIMAL(35,17).
讓我知道如何解決此轉換溢位問題。
uj5u.com熱心網友回復:
默認情況下,在 EF Core(和以前的版本)中,如果您沒有在 EF 模型中指定型別化列的精度Decimal,那么它將默認為 18 位數字和 2 位小數的精度,(18,2).
很可能在 EF6 中,您有一個約定將所有小數定義為DECIMAL(35,17)
在 .Net 6 中再次支持約定,我們現在將其添加到DbContext:
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
{
// Decimal (37,12) convention
configurationBuilder.Properties<decimal>()
.HavePrecision(37, 12);
}
基于回圈的解決方案/反映所有 EF 模型中的所有屬性以設定列型別
EF Core 不支持與EF6 OOTB相同的配置約定模型,有一段時間很糟糕,但我們繼續前進,這是關于該主題的舊討論: Entity Framework Core 約定在哪里?也在這里閱讀
這樣做的好處之一是模型配置是此類邏輯的標準DbContext位置,因此通過保持配置在線,或者至少在您的專案中,您的約定現在更容易被發現。在 EF6 中,我們中的許多人實作了自定義約定并將它們打包到可分發的庫中以供重用。這有效地使它們成為黑盒,通常會導致相同約定的本地變體,以便當前的專案開發人員在需要檢查或更改邏輯時可以訪問邏輯。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/537361.html
