我使用mvc4。我有一个模型。在该模型中,我创建了一个名为“AllFuels”的数据类型为Float的字段。 但是当在数据库中自动创建表时,“AllFuels”字段的数据类型是真实的。我使用模型第一种方法。任何人都知道这种情况发生的原因吗?
public float AllFuels { get; set; }
但是表中的这个字段是作为真实数据类型创建的。
答案 0 :(得分:0)
......为什么会这样?
嗯,这很容易 - 因为这是编程到EF中的映射。
重要吗?
请看以下内容:
所以“近似范围”†对于两者都是相同的,存储量也是如此:它们都是32位浮点二进制点类型。令人讨厌的是BOL reference for data type conversion中没有特别提到.NET float,这使得很难快速查看‡。
此外,Edm.Float
在Edm数据类型(MSDN: Conceptual Model Types (CSDL))中列为7位精度的浮点,因此与.NET中的float和SQL Server中的实际匹配( CSDL是描述entites,关系等的XML语言,并且是used by EF)。
那我该怎么办?
微软对ADO.NET中的浮点有什么看法?如果您阅读:MSDN - Data Type Mappings in ADO.NET (Floating-Point Numbers),他们会说“测试”。这样做,如果这个精度对你来说不够,那么你的.NET类型必须是double
,它应该成为SQL Server中更高精度的类型(它将转换为float(53)
,我相信)
† 我无法快速找到IEEE参考,所以我会指向wikipedia for the definition of "approximate range"。
‡ 编辑 Guru Lasse V. Karlsen完全正确地要求我对此声明进行限定:Single
is equivalent to float
,我的严重要点是你必须知道要查找Single
而不是float
,以便能够在参考中找到信息。