实体框架 - 查询精度

Posted

技术标签:

【中文标题】实体框架 - 查询精度【英文标题】:Entity Framework - Precision in queries 【发布时间】:2016-09-20 06:58:39 【问题描述】:

与这个问题非常相似:Why is Entity Framework passing a parameter as DECIMAL(5,0) for a column defined with NUMERIC(19)?

但是,给出的答案似乎与我的结果不一致。

我有一个列OrderEntryTimeUtc datetime2(0),在该列上对表进行了分区。现在,为了实际使用分区,我需要我的查询使用相同的类型和精度。

但是当我创建我的 where 子句时:

o.OrderEntryTimeUtc > dateStart

其中 dateStart 是一个日期时间,毫秒部分设置为 0,我得到以下生成的参数:

@p__linq__2 datetime2(7)
@p__linq__2='2016-05-21 23:44:33'

如何强制 EF 发送datetime2(0)?或者如何在查询中添加CONVERT,而无需在 SQL 中编写整个查询或创建视图?

【问题讨论】:

【参考方案1】:

你可以使用模型构建器

modelBuilder.Entity<YourEntity>()
    .Property(p => p.OrderEntryTimeUtc)
    .HasColumnType("datetime2")
    .HasPrecision(0);

【讨论】:

你试过了吗?它不会改变查询参数的精度。 @Massanu:不幸的是,这不会改变查询,只会改变列。但如果这样做会更有意义。

以上是关于实体框架 - 查询精度的主要内容,如果未能解决你的问题,请参考以下文章

如何更改实体框架为日期时间生成 SQL 精度的方式

保存到 DB、C# 时会丢失十进制精度。我正在使用实体框架 [重复]

实体框架 linq 查询 Include() 多个子实体

实体框架:查询子实体 [重复]

内联 SQL 查询和实体框架触发的查询有啥区别?

实体框架查询——加载数据优化