验证 30000 没有为小数列指定类型
Validation 30000 No Type Specified for the Decimal Column
在不使用属性的情况下指定小数精度的最佳方法是什么。
我只需要在我的 Data.Models 中为所有小数设置一个位置。为每个小数点指定属性很乏味。
public class Customer
{
public int customerId { get; set; }
[Column(TypeName = "decimal(18,2)")]
public decimal AvailableAmount { get; set; }
}
在 dbcontext 中的 OnModelCreating
方法中添加以下内容:
protected override void OnModelCreating(ModelBuilder builder)
{
foreach (var property in builder.Model.GetEntityTypes()
.SelectMany(t => t.GetProperties())
.Where(p => p.ClrType == typeof(decimal) || p.ClrType == typeof(decimal?)))
{
property.Relational().ColumnType = "decimal(18,2)";
}
}
我在使用 ASP.NET CORE 5 时遇到了这个问题。我在 DbContext 的 OnModelcreating 方法中添加了以下代码。
protected override void OnModelCreating(ModelBuilder modelBuilder)// Crée la migration
{
modelBuilder.Entity<MyEntity>().Property(p => p.Prix).HasColumnType("decimal(18,4)");
}
一切正常。
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
var properties = entityType.ClrType.GetProperties().Where(p => p.PropertyType == typeof(decimal));
foreach (var property in properties)
{
modelBuilder.Entity(entityType.Name).Property(property.Name).HasColumnType("decimal(18,2)");}
http://jameschambers.com/2019/06/No-Type-Was-Specified-for-the-Decimal-Column/
对于那些在 EntityFrameworkCore 6.0 上遇到同样问题的人,可以这样做:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
var decimalProps = modelBuilder.Model
.GetEntityTypes()
.SelectMany(t => t.GetProperties())
.Where(p => (System.Nullable.GetUnderlyingType(p.ClrType) ?? p.ClrType) == typeof(decimal));
foreach (var property in decimalProps)
{
property.SetPrecision(18);
property.SetScale(2);
}
}
在不使用属性的情况下指定小数精度的最佳方法是什么。 我只需要在我的 Data.Models 中为所有小数设置一个位置。为每个小数点指定属性很乏味。
public class Customer
{
public int customerId { get; set; }
[Column(TypeName = "decimal(18,2)")]
public decimal AvailableAmount { get; set; }
}
在 dbcontext 中的 OnModelCreating
方法中添加以下内容:
protected override void OnModelCreating(ModelBuilder builder)
{
foreach (var property in builder.Model.GetEntityTypes()
.SelectMany(t => t.GetProperties())
.Where(p => p.ClrType == typeof(decimal) || p.ClrType == typeof(decimal?)))
{
property.Relational().ColumnType = "decimal(18,2)";
}
}
我在使用 ASP.NET CORE 5 时遇到了这个问题。我在 DbContext 的 OnModelcreating 方法中添加了以下代码。
protected override void OnModelCreating(ModelBuilder modelBuilder)// Crée la migration
{
modelBuilder.Entity<MyEntity>().Property(p => p.Prix).HasColumnType("decimal(18,4)");
}
一切正常。
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
var properties = entityType.ClrType.GetProperties().Where(p => p.PropertyType == typeof(decimal));
foreach (var property in properties)
{
modelBuilder.Entity(entityType.Name).Property(property.Name).HasColumnType("decimal(18,2)");}
http://jameschambers.com/2019/06/No-Type-Was-Specified-for-the-Decimal-Column/
对于那些在 EntityFrameworkCore 6.0 上遇到同样问题的人,可以这样做:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
var decimalProps = modelBuilder.Model
.GetEntityTypes()
.SelectMany(t => t.GetProperties())
.Where(p => (System.Nullable.GetUnderlyingType(p.ClrType) ?? p.ClrType) == typeof(decimal));
foreach (var property in decimalProps)
{
property.SetPrecision(18);
property.SetScale(2);
}
}