模型中的浮动类型字段,而在数据库中自动创建为真实类型

本文关键字:类型 数据库 创建 真实 字段 模型 | 更新日期: 2023-09-27 18:14:14

我使用mvc4 .我有一个模型。在该模型中,我创建了一个名为"AllFuels"的数据类型为Float的字段。但是当表在数据库中自动创建时,字段"AllFuels"的数据类型是真实的。我使用模型第一方法。有人知道为什么会发生这种情况吗?

public float AllFuels { get; set; }

但是这个字段在表中被创建为真实数据类型

模型中的浮动类型字段,而在数据库中自动创建为真实类型

…为什么会发生这种情况?

这很简单-因为这是被编程到EF中的映射。

这有关系吗?

看下面的句子:

    SQL Server BOL: float和real (Transact-SQL):
    • -3.40E + 38至-1.18E - 38, 0和1.18E - 38至3.40E + 38
    • 4字节存储
    • real的ISO同义词是float(24)。
    • 7位精度
  • float (c#参考)
      38
    • -3.4×10 <一口> + 3.4×10 <一口> 38
    • 7位精度
    • 32位存储(4字节)

所以"近似范围"对于两者是相同的,存储量也是相同的:它们都是32位浮点二进制类型。令人恼火的是,. net float在数据类型转换的BOL参考中没有特别提到,这使得很难快速查找

此外,Edm.Float在Edm数据类型(MSDN:概念模型类型(CSDL))中作为7位精度的浮点数列出,以便与。net中的float和SQL server中的real匹配(CSDL是描述实体,关系等的XML语言,由EF使用)。

那么我该怎么办呢?

微软对ADO.NET中的浮点数说了些什么?如果你读过:MSDN - ADO中的数据类型映射。NET(浮点数),他们说"测试"。所以这样做,如果这个精度对你来说还不够,那么你的。net类型需要是一个double代替,这应该成为一个更高的精度类型在SQL Server(它会转化为float(53),我相信)


我无法快速找到IEEE的参考资料,所以我将指向维基百科上的"近似范围"的定义。

编辑 Guru Lasse V. Karlsen要求我对这一陈述进行限定是完全正确的:Single相当于float,我表达得很糟糕的观点是,你必须知道寻找Single而不是float才能找到参考资料中的信息。