如何在实体框架代码首次迁移中设置十进制精度和比例

本文关键字:十进制 设置 精度 迁移 实体 框架 代码 | 更新日期: 2023-09-27 17:49:54

我正在使用实体框架迁移,需要在实体中设置十进制属性的精度和比例。我只考虑这一个小数性质,而不是所有的小数性质。我已经重写了OnModelCreating方法,将decimal默认设置为(18,2)。我需要这个性质是(22,5)例如,

public class AdditionalCharge
{
  public decimal? Rate { get; set; }
}

在数据库中被创建为"decimal (18,2) NULL"列。我需要它变成一个"decimal (22,5) NULL"列。

我可以创建一个空的迁移并手动编写更改,

public override void Up()
{
  AlterColumn("dbo.AdditionalCharge", "Rate", c => c.Decimal(nullable: true, precision: 22, scale: 5));
}

,但我宁愿改变c#声明,让迁移创建更改。

有办法吗?

迈克

如何在实体框架代码首次迁移中设置十进制精度和比例

您也可以在OnModelCreating中设置列的精度:

modelBuilder.Entity<AdditionalCharge>().Property(o => o.Rate ).HasPrecision(22, 5);

但是我不知道这个更改是否会在迁移中被拾取。

我需要做几乎相同的事情。数据库中的数据类型是十进制(18,2)这意味着总共有18位数字,小数点后最大为2。我需要它是十进制的(18,5)并且需要一个迁移来做这个。为了让实体框架6自动拾取这一点,我将模型中道具上方的数据注释从[DataType(DataType. currency)]更改为[Column(TypeName = "decimal(18.5)")],实体框架拾取了这一点,并在我做'add-migration'时为我填充了迁移文件。

在我的模型(ExampleForm.cs)中旧的数据类型在弄清楚之前:

[DataType(DataType.Currency)]
public decimal LaborCost { get; set; }

新的数据类型在我的模型(ExampleForm.cs)后弄清楚:

[Column(TypeName = "decimal(18,5)")]
public decimal LaborCost { get; set; }

我正在处理美元值,但我需要允许输入的一些值处理十进制后超过2位的数字。

因此,为了具体回答这个问题,在模型中需要更改的每个道具上方,您应该添加

[Column(TypeName = "decimal(22,5)")]

有用的链接:https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.datatype?view=net-7.0https://learn.microsoft.com/en-us/sql/t-sql/data-types/decimal-and-numeric-transact-sql?view=sql-server-ver16