【问题标题】:decimal? in Entity Framework十进制?在实体框架中
【发布时间】:2013-07-21 10:26:14
【问题描述】:

我使用http://msdn.microsoft.com/en-us/data/jj200620 视频来学习如何创建访问旧 SQL Server 数据库的 C# 控制台应用程序。

我将数据库中的一些字段设置为Money。实体框架从现有数据库创建了一个模型,并创建了一个类型为decimal? 的属性。这使得在 C# 中使用它变得很有趣,因为它变成了一个函数:

private static string WriteMoney(decimal? item, string output)

这工作正常。

我在decimal? 的互联网上找不到任何东西。显然Moneydecimal,我可以通过更改 SQL 数据库类型来解决这个问题。这不会引起麻烦,只是一个有趣的观察。

有人遇到过这种情况吗?

【问题讨论】:

  • SQL中列的声明是什么?我敢打赌它允许空值。

标签: c# sql decimal sqldatatypes


【解决方案1】:

SQL MONEYdecimal 某种 类型,有四个小数点。
功能上类似于SQLDECIMAL(19,4)

但是,如果您要进行任何非标量算术运算,则不建议使用 MONEY 类型,而应使用适当的 DECIMAL 类型:

Should you choose the MONEY or DECIMAL(x,y) datatypes in SQL Server?

这是与 doublefloat 的一个重要区别,它们是 base-2 单位

关于可空性,所有 SQL 类型都可以是可空的,如果它们在模式中以这种方式设置的话。如果您不希望 EF 使用可为空的类型,则需要使 SQL 字段不可为空并刷新您的 dbml。

【讨论】:

  • 我认为问题中更重要的部分是小数的可空性。
  • @gunr2171 如果在架构中正确设置任何 SQL 类型,它都可以为空...
【解决方案2】:

decimal? 只是Nullable<decimal> 的语法糖

如果您还不知道,您可能想阅读Nullable

C# 没有 SQL 那样的“金钱”类型,因此 EF 必须获得下一个最接近的东西,即 decimaldecimal 只是 System.Decimal 的 C# 关键字。

我猜你的 SQL 中 money 类型的列允许空值。这就是为什么它是decimal? 而不仅仅是普通的decimal,因为System.Decimal 是一个结构,不能为空。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 2019-09-24
    相关资源
    最近更新 更多