如何在EntityFrameworkCore 1.0 rc2中实现字段十进制(5,2)?

时间:2016-05-23 21:25:35

标签: c# entity-framework-core

如何在decimal(5,2)中实现字段EntityFrameworkCore 1.0 rc2

HasPrecision似乎不再可用了?

4 个答案:

答案 0 :(得分:27)

您可以为此添加扩展程序:

public static class SqlServerModelBuilderExtensions
{
    public static PropertyBuilder<decimal?> HasPrecision(this PropertyBuilder<decimal?> builder, int precision, int scale)
    {
        return builder.HasColumnType($"decimal({precision},{scale})");
    }

    public static PropertyBuilder<decimal> HasPrecision(this PropertyBuilder<decimal> builder, int precision, int scale)
    {
        return builder.HasColumnType($"decimal({precision},{scale})");
    }
}

答案 1 :(得分:24)

我看到一些这样的例子:

 entityBuilder.Property(r => r.TotalScore)
            .HasColumnType("decimal(5,2)")
            .IsRequired(true);

并且支持此功能的代码在这里,所以希望您使用的版本支持此功能:

https://github.com/aspnet/EntityFramework/blob/f416dd9a71a5a6a69715b4ba40a37e6f9da751ef/src/Microsoft.EntityFrameworkCore.Relational/Metadata/Internal/RelationalPropertyBuilderAnnotations.cs

答案 2 :(得分:6)

从 EF Core 5 开始,您可以使用它:

modelBuilder.Entity<Payment>().Property(b => b.Amount).HasPrecision(12, 4);

答案 3 :(得分:0)

JFYI,如果somedoby突然出现这个问题(就像我一样)

在当前版本的EF Core(2.2)中,还有执行此操作的数据注释方法:

public class SomeEFModelClass
{
    [Column(TypeName = "decimal(5,2)")]
    public decimal TotalScore{ get; set; }
}

链接到文档:https://docs.microsoft.com/en-us/ef/core/modeling/relational/data-types