0

在我的模型在asp.net核心時,我腳手架我的數據庫它只允許有兩個小數點,如0.10的數字,但是,我不允許插入四個小數位到我的數據庫。asp.net核心模型四位小數驗證

下面是我的模型。

 public class Order 
{ 
    public int OrderID { get; set; } 

    [RegularExpression(@"^\d+.\d{0,4}$", ErrorMessage = "Must have four decimal places")] 
    [Range(0.0001, 1)] 
    [Display(Name = "Goal Diameter Tolerance")] 
    public decimal? GoalDiameterTolerance { get; set; } 
} 

以下是GoalDiameterTolerance scaffolded。它只允許有兩位小數。我可以改變它,但是,我如何在模型中的腳手架之前修復它。

GoalDiameterTolerance = table.Column<decimal>(type: "decimal(18, 2)", nullable: true), 

它應該支持這個我相信。

GoalDiameterTolerance = table.Column<decimal>(type: "decimal(18, 4)", nullable: true), 

這是我如何解決我的問題。

foreach (var property in modelBuilder.Model 
      .GetEntityTypes() 
      .SelectMany(t => t.GetProperties()) 
      .Where(p => p.ClrType == typeof(decimal) || 
      p.ClrType == typeof(decimal?)) 
      .Select(p => modelBuilder.Entity(p.DeclaringEntityType.ClrType).Property(p.Name)) 
      ) 
     { 
      property.HasColumnType("decimal(18,4)"); 
     } 
+0

[DisplayFormat(ApplyFormatInEditMode = TRUE,DataFormatString =「{0 :#。####}「)]是另一種不可行的方式。 –

回答

0

我不認爲EF代碼生成試圖從Display \ Validation屬性推導列類型。你應該可以指定所需的列中鍵入明確使用列屬性

Column(TypeName = "decimal(18, 4)") 

或者通過重寫OnModelCreating和自定義字段類型有

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Order>() 
      .Property(p => p.GoalDiameterTolerance) 
      .HasPrecision(18, 4); 
} 
+0

https://stackoverflow.com/questions/41468722/loop-reflect-through-all-properties-in-all-ef-models-to-set-column-type –

+0

我用上面的鏈接我會顯示上面的功能我用過的。 –

+0

謝謝。我找不到在模型中指定列信息的功能。 –