2009-11-30 110 views

回答

2

我遇到了同样的问题。我正在使用EF和SQL Server 2008 SP1。我使用存储过程来查询一些数据。另一个恼人的事情是,如果我为存储过程创建函数导入,则EF会在上下文类中提供一个函数来调用该sp,但对于我而言,它不会。所以我创建了自己的函数来调用sp。在那个函数中,我通过提供DBType.Decimal来创建EntityParameters。但是,这个结果在Precision和Scale设置为0.当我设置为正确的数字时,我的数据库模式需要(3和1 btw),一切正常。

泽索特

0

没有你提供你的映射类和数据库模式我只能假设你在其中的一个中使用了一个Int或者其他设置为零的小数位的精度。

它也值得一提的是你正在使用哪个版本的EF(实体框架)。

+1

你可以假设,但你会错的。我看到同样的问题......一年多以后,使用EF Code-Only CTP 5。 – 2011-02-21 03:09:06

0

它不应该发生的是简短的答案。

什么蒂莫西说,类似的,很可能是以下中的一个正在发生的事情:

  • 您生成的类之一的属性被定义为int,而列是一个十进制 - 你可以这样做通过更改实体设计器中的实际类型
  • 代码中的某处,您使用的是整数而不是小数。特别是,如果你使用使用var隐式类型,编译器可以推断不可分割的类型,而不是一个小数型

澄清第二点的例子:

var myNumber = 100; // myNumber will be an int 

myNumber = myNumber/3; // myNumber == 33 (an int) 

你能交一些代码给我们一个更好的主意?

0
在C#

,INT/INT = INT

10/2 = 5,10/3 = 3

的与截断语言答案(不圆),所以如果你想要得到准确的,你需要将变量转换为双精度或小数。