实体框架 - 查询精度

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:不幸的是,这不会改变查询,只会改变列。但如果这样做会更有意义。

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