代码发送双精度值,EF 以错误的方式使用它创建查询

Code sending double value, EF creating query with it the wrong way

提问人:Thierry Verhaegen 提问时间:2/8/2023 最后编辑:chux - Reinstate MonicaThierry Verhaegen 更新时间:2/9/2023 访问量:36

问:

我正在填充一个有双精度的对象。在数据库中,此字段是浮点数。我的 EF savechanges 失败,因为它说它返回 0 条记录。

我使用 sql profiler 查看它向数据库发送了哪个查询,但此查询确实失败了,从而导致它返回 0 条记录。

所以 EF 是对的,但它将我的浮点数发送到查询中,导致查询崩溃。有人知道它为什么要这样做吗?我怎样才能避免它?

这是我的代码对象:

public partial class Rate : IRate
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [Column(Order = 0)]
        public int Id { get; set; }

        [StringLength(3)]
        public string source_currency { get; set; }

        [StringLength(3)]
        public string target_currency { get; set; }

        public DateTime? date_l { get; set; }

        public double? rate_exchange { get; set; }

        [Key]
        [Column(Order = 1)]
        public DateTime CreatedOn { get; set; }
    }

我将双精度值放入 c# 中的 rate_Exchange 字段中,效果很好。使用调试器检查元素时,它具有正确的双精度值。

但是,EF 将其发送到格式如下的数据库:

exec sp_executesql N'INSERT [dbo].[Rates]([CreatedOn], [source_currency], [target_currency], [date_l], [rate_exchange])
VALUES (@0, @1, @2, @3, @4)
SELECT [Id]
FROM [dbo].[Rates]
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity() AND [CreatedOn] = @0',N'@0 datetime2(7),@1 varchar(3),@2 varchar(3),@3 datetime2(7),@4 float',@0='2023-02-08 15:58:58.0231618',@1='RUB',@2='EUR',@3='2023-02-01 00:00:00',@4=0,0132374518222941

显然,这失败了,因为它使用了 ,而不是 .对于第 4 个参数

有人有什么线索吗?

C# 实体框架 浮点 双精度

评论

0赞 Shiin Zu 2/10/2023
是否为应用程序使用自定义区域性?尝试将其设置为不变。
0赞 Thierry Verhaegen 3/16/2023
在某处阅读该解决方案,根本不起作用。

答: 暂无答案