gpt4 book ai didi

c# - Entity Framework : Mapping a db real to decimal? 无法将 System.Single 转换为 System.Double

转载 作者:行者123 更新时间:2023-11-30 16:43:53 27 4
gpt4 key购买 nike

我有一个包含以下字段的表:

dbo.AccountProbability

StageKey (binary(16), not null)
AccountId (int, not null)
Probability (real, null)
IsCurrent (bit, not null)

它在 Entity Framework 中的映射方式如下:

[Table("dbo.AccountProbability")]
public partial class AccountProbability
{
[Required]
[MaxLength(16)]
public byte[] StageKey { get; set; }

public int AccountId { get; set; }

public double? Probability { get; set; }

public bool IsCurrent { get; set; }
}

当我尝试将它映射到一个对象时,在下面的方法中,我得到一个错误:

public async Task GetAccountProbabilities()
{
var repo = GetDatabaseRepo();
var validAcctProbs = repo.Where<AccountProbability>(
m => m.IsCurrent).ToList();
}


private static IDatabaseRepository GetDatabaseRepo()
{
var context =
new DbContext(ConfigurationManager.ConnectionStrings["DatabaseConnectionString"].ConnectionString);
return new DatabaseRepository(context);
}

将其放入列表时,它在 validAcctProbs 上失败,并出现错误:“AccountProbability”上的“Probability”属性无法设置为“System.Single”值。您必须将此属性设置为“System.Double”类型的非空值。

我相信 TSQL 中的实数是 EF 中的 double 。

编辑:我不认为这是一个骗局,因为之前的问题专门针对该驱动程序中的 SQLite 和错误映射。这是针对 Microsoft TSQL 的。

最佳答案

I believe that reals in TSQL are doubles in EF

文档对此有点模棱两可。我们需要在实现中查找它。 source code of EF6是公开的,所以我们发现:

<Type Name="tinyint" PrimitiveTypeKind="Byte"></Type> 
<Type Name="smallint" PrimitiveTypeKind="Int16"></Type>
<Type Name="int" PrimitiveTypeKind="Int32"></Type>
<Type Name="bigint" PrimitiveTypeKind="Int64"></Type>
<Type Name="float" PrimitiveTypeKind="Double"></Type>
<Type Name="real" PrimitiveTypeKind="Single"></Type>
<Type Name="decimal" PrimitiveTypeKind="Decimal">

让我来说明为什么这是有道理的:

  1. 在 T-SQL 中,从 SQL Server 2008 开始,real is float(24) 是一个 4 字节(32 位) float 。
  2. 在 .NET 中,Single float 是一个 4 字节(32 位) float 。
  3. 在 .NET 中,Double是一个 8 字节(64 位) float 。

real 的范围:-3.40e38 到 3.40e38
Single 的范围:-3.402823e38 到 +3.402823e38

因此,为您的 Probability 字段使用 double? 类型没有意义,因为 real 永远不会耗尽 的精度code>单.

关于c# - Entity Framework : Mapping a db real to decimal? 无法将 System.Single 转换为 System.Double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44166722/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com