2011-06-16 97 views
7

我创建了一个名为Amount的列,并将其设置为Decimal。我找不到将它设置为货币或小额货币的位置,当我尝试将值设置为0.2时,它会舍入为0 ....首先在实体框架模型中使用货币类型

如何将钱用于实体框架?

谢谢!

回答

-2

应用一些代码,其中EF的版本你使用等 当数据库表中创建,您可以检查映射表,如果你愿意,你可以更改默认映射

0

因此,我认为你的问题可能是代码优先的方法。另外,我不确定你使用的是什么版本的SQL,下面的答案只适用于SQL Server ..但是基本上,对于Oracle或MySQL来说,它的方式基本相同。

型号第一:

使用SQL Server,您只需将选择“钱”或“SMALLMONEY”的领域,这取决于如何大,你需要代表价值。

代码第一:

我需要表达的钱,高达9999.99

在可视化编辑EDMX,你会选择标属性,选择属性,然后将其设置为TYPE =小数,然后将Facets设置为Precision = 6 Scale = 2.您可以使用Data Annotations确保该字段以金钱形式显示&。

+1

尝试一个代码示例它可能会更清晰? – sarin 2014-05-08 15:35:16

3

实体框架令人讨厌的事情之一是它将Decimal变量类型翻译为SQL中的Decimal(18,0)。

逗号后面的数字是该数字上允许的小数位数。所以十进制(18,0)会在小数点后保存数字。

转到SQL Server Management stuido,找到您的数据库,右键单击表并选择“设计”。然后从列表中选择列,您应该可以通过在框中输入将数据类型更改为Decimal(18,2)。然后将更改保存到表格中。然后它会将这个数字保存到西方货币交易中通常使用的两位小数位。如果您需要更多小数位,请相应地增加括号内的第二个数字。

我从来没有找到改变此EF默认设置的设置,以便它生成Decimal(18,2)。但是我从来没有看过:在数据库中很容易改变。但是如果有人知道,我会很好奇,知道它是如何完成的。

编辑:更多的信息 - 包括配置修复 - 在这样的回答: Decimal precision and scale in EF Code First

+0

嗯,我还没有EF 6/6的这种经验。1我所有的小数保存(18,2) – Aviatrix 2014-05-08 16:11:05

+0

我不能评论EF6(不使用它),但我确信我记得早期版本发生这种情况。我猜可能是傻瓜式的执行 - 会在网上挖掘一下。 – 2014-05-08 16:12:11

+0

Boom:http://stackoverflow.com/questions/3504660/decimal-precision-and-scale-in-ef-code-first – 2014-05-08 16:13:48

0

这类似于Decimal precision and scale in EF Code First 。我首先使用EF 6.1和代码,由于某些原因,默认情况下将smallmoney定义为precision 2,尽管它应该是4.您需要添加一些Fluent代码来解决此问题。 我使用类似于:

public static void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
     modelBuilder.Entity<MYCLASSNAME>().Property(x => x.MYPROPNAME).HasPrecision(5+4, 4); 
} 
相关问题