我创建了一个表,其中有一个名为Amount的列,并将其设置为Decimal。我找不到将其设置为money或smallmoney的位置,当我尝试设置一个像0.2这样的值时,它四舍五入为0……
如何在实体框架中使用money?
谢谢!
发布于 2014-05-09 00:05:54
Entity Framework的一个恼人之处在于,它在SQL中将Decimal变量类型转换为Decimal(18,0)。
逗号后面的数字是该数字允许的小数位数。因此,Decimal(18,0)在保存时将去掉小数点后的数字。
转到SQL Server Management stuido,找到您的数据库,右键单击表并选择"Design“。然后从列表中选择列,只需在框中键入就可以将数据类型更改为Decimal(18,2)。然后将更改保存到表中。然后,它将把数字保存到西方货币交易中通常使用的两个小数位。如果需要更多的小数位,只需相应地增加括号内的第二个数字即可。
我从来没有找到一个设置来改变这个EF默认值,使其生成Decimal(18,2)。但我从来没有看过:在DB中更改它很容易。但如果有人知道其中一个,我很想知道它是怎么做到的。
编辑:更多信息-包括配置修复-在此答案中:Decimal precision and scale in EF Code First
发布于 2014-05-08 23:12:15
所以我认为你的问题可能是代码优先的方法。另外,我不确定您使用的是哪个版本的SQL,我下面的回答仅适用于SQL Server。但对于Oracle或MySQL,基本上都是这样做的。
模型优先:
使用SQL Server时,您只需根据需要表示的值的大小,为字段选择"money“或"smallmoney”。
代码优先:
我需要表示一个最大为9999.99的货币类型
在可视化的EDMX编辑器中,您将选择标量属性,转到Properties,然后将其设置为Type = Decimal,然后将Facets设置为Precision =6 Scale = 2。您可以使用数据注释来确保字段显示和输入为货币。
发布于 2015-02-28 09:35:14
这类似于Decimal precision and scale in EF Code First。我使用的是EF 6.1和code first,由于某种原因,它默认将smallmoney定义为精度2,尽管它是/应该是4。你需要添加一些流畅的代码来修复这个问题。我使用类似这样的东西:
public static void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MYCLASSNAME>().Property(x => x.MYPROPNAME).HasPrecision(5+4, 4);
}
https://stackoverflow.com/questions/6377885
复制相似问题