为什么“real”和“float”都被映射到“Single”而不是“Double”?

时间:2014-01-08 17:15:55

标签: entity-framework sqlite

我在模型优先模式(= EDMX)中使用System.Data.SQLite 1.0.90与VS2013和EntityFramework 5。

我创建了一个包含表格的新SQLite数据库:

CREATE TABLE [..]
  [Test1integer] integer,
  [Test2int] int,
  [Test3smallint] smallint,
  [Test4tinyint] tinyint,
  [Test5bigint] bigint,
  [Test6money] money,
  [Test7float] float,
  [Test8real] real,
  [Test9decimal] decimal,
  [Test10numeric18_5] numeric(18,5), [..]

相关部分为Test7floatTest8real

执行从数据库更新模型... 后,EDMX现在包含:

SSDL:

      <Property Name="Test1integer" Type="integer" />
      <Property Name="Test2int" Type="int" />
      <Property Name="Test3smallint" Type="smallint" />
      <Property Name="Test4tinyint" Type="tinyint" />
      <Property Name="Test5bigint" Type="integer" />
      <Property Name="Test6money" Type="decimal" Precision="53" Scale="0" />
      <Property Name="Test7float" Type="real" />
      <Property Name="Test8real" Type="real" />
      <Property Name="Test9decimal" Type="decimal" Precision="53" Scale="0" />
      <Property Name="Test10numeric18_5" Type="decimal" Precision="18" Scale="5" />

相关部分为Test7floatTest8real

CSDL:

      <Property Name="Test1integer" Type="Int64" />
      <Property Name="Test2int" Type="Int32" />
      <Property Name="Test3smallint" Type="Int16" />
      <Property Name="Test4tinyint" Type="Byte" />
      <Property Name="Test5bigint" Type="Int64" />
      <Property Name="Test6money" Type="Decimal" Precision="53" Scale="0" />
      <Property Name="Test7float" Type="Single" />
      <Property Name="Test8real" Type="Single" />
      <Property Name="Test9decimal" Type="Decimal" Precision="53" Scale="0" />
      <Property Name="Test10numeric18_5" Type="Decimal" Precision="18" Scale="5" />

相关部分为Test7floatTest8real

问题

Test7float错误地变成了“真正的”+“单身” - 设计师也不允许“双重”。

SQLite3文档(http://www.sqlite.org/datatype3.html)明确指出“real”是一个8字节的IEEE浮点数,“float”只是“real”的同义词 - 因此在每种情况下都是“Double”( 8字节)应优先于“单一”(4字节)。

我做错了什么或者我误解了什么?如果不是:哪里出了问题,我该如何解决?

我应该为此创建错误报告吗?

2 个答案:

答案 0 :(得分:1)

看起来像是映射驱动程序中的错误。

用于声明列的类型仅用于关联(如果需要,可以将列声明为float并在其中存储blob)。

报告表结构时,SQLite只返回用于创建其字段的SQL定义(如果适用,则更改它们)。

因此,您的司机只能访问&#34; float&#34;对于字段类型,可能将其映射到&#34;单个&#34;通过一些通用代码,可能没有用SQLite编写(或者无论如何都被SQLite覆盖)。

答案 1 :(得分:0)

真正的sqlite数据类型实际上是一个float(http://www.sqlite.org/datatype3.html),对应的.Net框架类型是Single(http://msdn.microsoft.com/en-us/library/b1e65aza.aspx