【问题标题】:Fluent API HasColumnType - Database AgnosticFluent API HasColumnType - 与数据库无关
【发布时间】:2013-08-27 19:34:26
【问题描述】:

我们目前正在使用以下方法在 MS SQL Server 中设置货币列类型。

entity.Property(e => e.UnitPrice).HasColumnType("smallmoney");

entity.Property(e => e.UnitPrice).HasColumnType("money");

如果有的话,什么是一种更与数据库无关的方式?

【问题讨论】:

    标签: entity-framework fluent-interface


    【解决方案1】:

    使用十进制而不是金钱。在 c# 和 Db 中使用 Decimal。
    另见

    modelBuilder.Entity<MetaDomain>().Property(d => d.xyz).HasPrecision(precision, scale);
    

    decimals in SQL server docu

    MSDN decimal 哪个状态

    这使其适用于财务和货币计算。

    毫无疑问,十进制是处理货币的最与 DB 无关的方式。 您应该选择精度/比例以匹配所需的货币和精度。 而且我还建议您始终使用金额跟踪货币本身,除非您知道解决方案永远不会或将适用于超过 1 种货币。

    “货币金额”是指比货币本身描述的小数点多 4 位。由于像大批量零售商这样的行业,它们以几美分的价格管理物品。我必须在演示文稿中向零售商演示 4 位小数。 这意味着要满足许多不同的货币,并且就像更多的组织在内部金库中所做的那样,如果意味着要满足至少 5 位小数的话。我计划超越那以防万一。 XDR special drawing rights

    【讨论】:

    • Phil,我认为 OP 正在寻找一种方法来映射到数据库供应商显示的最合适的数据类型,而无需分别为每个供应商定义映射。所以 Sql Server 时为money,Oracle 时为numeric(d,p) 等。
    • 嗨格特,你可能是对的,但这仍然不能让“钱”成为正确的选择。而且我根本不推荐数据库供应商锁定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多