首页 > 解决方案 > EFCore 中 QueryType 的正确日期时间转换是什么?

问题描述

我的数据库中有一个我想用 EF Core 阅读的视图。

我用视图读取的数据是一个 int 列,我可以通过以下 SQL 语句将其转换为正确的日期:

 CONVERT(NVARCHAR, DATEADD(MI, wf_activate, '1899-30-12'), 101) + ' ' + 
     CONVERT(NVARCHAR, DATEADD(MI, wf_activate, '1899-30-12'), 110) AS Start

这会将数据正确转换为:

12/17/2018 12-17-2018

现在我想通过 EF Core 2.1 使用这个模型访问我的视图:

/// <summary>
/// Basis data from an ELO workflow.
/// </summary>
public class WorkflowStrangeUsersModel
{
    /// <summary>
    /// Gets or sets the workflow start date.
    /// </summary>
    public DateTime Start { get; set; }
}

和这个背景:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Query<WorkflowStrangeUsersModel>().ToView("INTRANET_WorkflowsStrangeUsers");
    }

它适用于字符串和 int 等,但在这种情况下,日期时间会引发错误:

读取属性“WorkflowStrangeUsersModel.Start”的数据库值时发生异常。预期类型为“System.DateTime”,但实际值为“System.String”类型。

所以我假设我转换为 101 / 110 (美国日期格式)是错误的。我也尝试了本地格式(德语)和默认格式(0),但同样的错误。

任何的想法?

标签: c#linqdatetimeviewef-core-2.1

解决方案


也许您可以将日期检索为 int,然后使用 C# 将其转换为 Datetime。您可以为此使用 2 个属性,StartInt 和 StartDate(该属性是只读的)


推荐阅读