Nel mio modello in asp.net core quando impalcato il mio database consente solo un numero con due cifre decimali come 0.10 ma, non mi è permesso inserire quattro cifre decimali nel mio database.
Di seguito è il mio modello.
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; }
}
Di seguito è riportato lo scaffold GoalDiameterTolerance. Permette solo due cifre decimali. Posso cambiarlo ma, come posso correggerlo prima dello scaffold nel modello.
GoalDiameterTolerance = table.Column<decimal>(type: "decimal(18, 2)", nullable: true),
Dovrebbe essere un'impalcatura per questo credo.
GoalDiameterTolerance = table.Column<decimal>(type: "decimal(18, 4)", nullable: true),
Ecco come ho risolto il mio problema.
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)");
}
Non penso che la generazione del codice EF provi a dedurre il tipo di colonna dagli attributi Display \ Validation. Dovresti essere in grado di specificare il tipo di colonna desiderato esplicitamente usando l'attributo Column
Column(TypeName = "decimal(18, 4)")
Oppure eseguendo l'override di OnModelCreating e personalizzando il tipo di colonna lì
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Order>()
.Property(p => p.GoalDiameterTolerance)
.HasPrecision(18, 4);
}