2013-07-22 90 views
2

我使用http://msdn.microsoft.com/en-us/data/jj200620视频来了解如何创建访问旧SQL Server数据库的C#控制台应用程序。小数?在实体框架中

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

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

其工作正常。

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

以前有人遇到过这个吗?

+1

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

回答

2

SQL MONEY是一个decimal排序有四个小数点的类型。
它在功能上类似于SQL DECIMAL(19,4)

但是,不建议使用MONEY类型,如果你会做任何非标量arithmatic,而你应该用合适的DECIMAL类型:

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

这是从doublefloat其是底数为2的单位的一个重要分化

至于空性,所有如果在模式中这样设置SQL类型,它们可以为空。如果您不希望EF使用可空类型,那么您需要使SQL字段不可为空并刷新您的dbml。

+0

我认为问题的更重要的部分是小数的可空性。 – gunr2171

+0

@ gunr2171如果在模式中正确设置了任何SQL类型,则它们可以为空。 – Matthew

1

decimal?只是为Nullable<decimal>

语法糖你可能想在Nullable阅读,如果你不知道这件事了。

C#没有像SQL这样的“钱”类型,所以EF必须得到下一个最接近的东西,即decimaldecimal只是一个C#关键字System.Decimal

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