我試圖在現有的銷售點應用中使用代碼優先。這是一款加油站應用程序,所以我需要使用小數點後三位數字的貨幣。EF5代碼第一次遷移:小數精度和刻度
我用我的遷移下面的代碼來設置精度及規模:
CustomSqlGenerator.DropDefaultConstraint("Config", "DefaultTaxPerDollar", q => Sql(q));
AlterColumn("Config", "DefaultTaxPerDollar", c => c.Decimal(nullable: false, precision: 19, scale: 4, defaultValue: 0.087m));
(該DropDefaultConstraint
電話是this bug一種變通方法我試過刪除它 - 創造在列。最初的遷移,而不是稍後改變 - 無濟於事。)
而且該列是以適當的精度和比例創建的。我可以使用SSMS正確輸入值(即1.2345保存爲1.2345)。但是,當通過模型保存值時,所有值都將被截尾(不是四捨五入)爲2位小數(例如0.5555變爲0.55)。
我試圖用在OnModelCreating方法的流利API如圖here的第一件事:在
- 包括
modelBuilder.Conventions.Remove<DecimalPropertyConvention>()
:protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity() .Property(c => c.DefaultTaxPerDollar) .HasPrecision(19, 4); base.OnModelCreating(modelBuilder); }
但是產生
The model backing the 'SalesDataStore' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269)
也試過
OnModelCreating
方法,完全刪除18,2十進制常規。與上面相同 - 從頭開始構建最新的source code,並在
DecimalPropertyConvention
課程中將默認比例更改爲4。同樣的例外。
如果更改模型映射中的任何內容或刪除默認約定,則還必須創建新的遷移。你試過了嗎? –
嗯,我沒有想到這一點。現在嘗試... – HiredMind
這工作。我想我沒有意識到OnModelCreating是針對遷移目的的變化進行檢查的。我認爲這只是在模型創建之前調整某些東西的鉤子。如果你發表了一個答案,我會讚揚它 - 我認爲其他人可能不清楚這種方法的性質。 – HiredMind