我正在使用 mvc4。我有一个模型。在该模型中,我创建了一个名为“AllFuels”的数据类型 Float 的字段。但是当表在数据库中自动创建时,字段“AllFuels”的数据类型是真实的。我使用模型优先方法。有人知道发生这种情况的原因吗?
public float AllFuels { get; set; }
但是表中的这个字段被创建为真正的数据类型。
我正在使用 mvc4。我有一个模型。在该模型中,我创建了一个名为“AllFuels”的数据类型 Float 的字段。但是当表在数据库中自动创建时,字段“AllFuels”的数据类型是真实的。我使用模型优先方法。有人知道发生这种情况的原因吗?
public float AllFuels { get; set; }
但是表中的这个字段被创建为真正的数据类型。
...为什么会这样?
嗯,这很容易 - 因为这是编程到 EF 中的映射。
有关系吗?
请看以下内容:
因此,两者的“近似范围” †相同,存储量也相同:它们都是 32 位浮点二进制点类型。令人讨厌的是,.NET 浮点数在BOL 参考中没有特别提到数据类型转换,这使得快速查找它变得很困难‡。
此外,Edm.Float
在 Edm 数据类型(MSDN:Conceptual Model Types (CSDL))中被列为具有 7 位精度的浮点数,因此与 .NET 中的浮点数和 SQL 服务器中的实数相匹配(CSDL是 XML 语言描述实体、关系等并由 EF 使用)。
所以我该怎么做?
Microsoft 对 ADO.NET 中的浮点数有何看法?如果您阅读:MSDN - ADO.NET(浮点数)中的数据类型映射,他们会说“测试”。所以这样做,如果这个精度对你来说不够,那么你的 .NET 类型需要改为 a double
,它应该成为 SQL Server 中更高精度的类型(float(53)
我相信它会转换为 )
† 我无法快速找到 IEEE 参考资料,因此我将在维基百科中为您指出“近似范围”的定义。
‡ 编辑Guru Lasse V. Karlsen要求我对这个陈述进行限定是完全正确的:Single
相当于float
,我表达得很糟糕的观点是你必须知道寻找Single
而不是float
能够找到参考资料中的信息。