在我的asp.net核心模型中,当我搭建我的数据库时,它只允许带有两个小数位的数字,如0.10但是,我不允许在我的数据库中插入四个小数位。
以下是我的模特。
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脚手架。它只允许两位小数。我可以改变它但是,如何在模型中的脚手架之前修复它。
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 :(得分:0)
我认为EF代码生成不会尝试从Display \ Validation属性中推断出列类型。您应该能够使用Column属性
显式指定所需的列类型Column(TypeName = "decimal(18, 4)")
或者通过覆盖OnModelCreating并自定义列类型
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Order>()
.Property(p => p.GoalDiameterTolerance)
.HasPrecision(18, 4);
}