EFCore中QueryType的正确日期时间是什么?

时间:2019-07-01 07:02:37

标签: c# linq datetime view ef-core-2.1

我的数据库中有一个要使用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),但存在相同的错误。

有什么主意吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

就像@ bradbury9暗示的那样,我会将视图更改为

DATEADD(MI, wf_activate, '1899-30-12') AS Start

这将使在调用数据库时已经开始一个datetime列。

使用问题中的视图,您首先要从DATEADD函数获取日期时间,然后使用CONVERT将其转换为NVARCHAR(字符串)。