我一直在试图找出如何为EF7(Beta 4)设置小数精度而没有运气的方法。

我期待做类似的事情:

modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).Precision(10, 6)

这似乎不可用,但是我能够在GitHub的存储库中找到以下类:

https://github.com/aspnet/EntityFramework/blob/7.0.0-beta4/src/EntityFramework.Relational/RelationalDecimalTypeMapping.cs

没有使用过RelationalTypeMapping类或方法签名的示例。也许这只是作为用于获取信息的映射API的一部分?

我可能期望的另一个地方是:
modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).ForRelational().ColumnType()

或者
modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).ForSqlServer().ColumnType()

这些只需要一个字符串,是否还没有实现此功能,或者我只是不在正确的位置查找?

编辑:刚刚意识到字符串可能适用于.ColumnType(“decimal(10,6)”)解决方案类型,直到进一步构建为止,尽管我宁愿不使用字符串,也仍然不介意得到一些澄清为了这

编辑:从bricelam澄清后,我最终创建了以下扩展名以供使用,以避免使用字符串,并且我很欣赏他们的方法的简单性:
public static RelationalPropertyBuilder DecimalPrecision(this RelationalPropertyBuilder propertyBuilder, int precision, int scale)
    {
        return propertyBuilder.ColumnType($"decimal({precision},{scale})");
    }

用法示例:
modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).ForRelational().DecimalPrecision(10,6);

编辑:修改RC1

我还没有测试过这些,但我只是将以下两个示例放在一起,它们可能与RC1一样
    public static PropertyBuilder DecimalPrecision(this PropertyBuilder propertyBuilder, string precision, string scale)
    {
        return propertyBuilder.HasColumnType($"decimal({precision},{scale})");
    }

    public static PropertyBuilder SqlDecimalPrecision(this PropertyBuilder propertyBuilder, string precision, string scale)
    {
        return propertyBuilder.ForSqlServerHasColumnType($"decimal({precision},{scale})");
    }

因为我还没有尝试过,所以我不确定“HasColumnType”或“ForSqlServerHasColumnType”之间的正确用法,但希望这会为正确的方向指明方向。

最佳答案

您的解决方法是我们想要的设计。您可以设置精度,刻度,最大长度,unicode/ansi,固定/可变长度等类型,而不用一堆“构面”。我们决定保持简单:如果默认类型映射不是您想告诉我们使用哪种类型。曾经有传言说过要重新考虑这一决定,并重新引入“方面”。如果您对此有强烈的感觉,我鼓励您使用create a new issue

还要注意,类型映射中目前还有很多其他错误,但是应该在我们发布beta5时修复。

关于entity-framework-core - Entity Framework 7为模型构建器设置小数精度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30388695/

10-17 00:10