EF Core 中查询类型的正确日期时间转换是什么?
What is the correct datetime-cast for a QueryType in EFCore?
我的数据库中有一个视图,我想用 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 等,但在这种情况下,日期时间会引发错误:
An exception occurred while reading a database value for property 'WorkflowStrangeUsersModel.Start'. The expected type was 'System.DateTime' but the actual value was of type 'System.String'.
所以我假设我转换成 101 / 110(美国日期格式)是错误的。我也尝试了本地格式(德语)和默认格式 (0),但同样的错误。
有什么想法吗?
也许您可以将日期作为 int 检索,然后使用 C# 将其转换为 Datetime。您可以为此使用 2 个属性,StartInt 和 StartDate(那个是只读的)
就像@bradbury9 暗示的那样,我会改变我的看法
DATEADD(MI, wf_activate, '1899-30-12') AS Start
这将使 Start 在调用数据库时已经成为一个日期时间列。
对于问题中的视图,您首先从 DATEADD 函数获取日期时间,然后使用 CONVERT 将其转换为 NVARCHAR(字符串)。
我的数据库中有一个视图,我想用 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 等,但在这种情况下,日期时间会引发错误:
An exception occurred while reading a database value for property 'WorkflowStrangeUsersModel.Start'. The expected type was 'System.DateTime' but the actual value was of type 'System.String'.
所以我假设我转换成 101 / 110(美国日期格式)是错误的。我也尝试了本地格式(德语)和默认格式 (0),但同样的错误。
有什么想法吗?
也许您可以将日期作为 int 检索,然后使用 C# 将其转换为 Datetime。您可以为此使用 2 个属性,StartInt 和 StartDate(那个是只读的)
就像@bradbury9 暗示的那样,我会改变我的看法
DATEADD(MI, wf_activate, '1899-30-12') AS Start
这将使 Start 在调用数据库时已经成为一个日期时间列。
对于问题中的视图,您首先从 DATEADD 函数获取日期时间,然后使用 CONVERT 将其转换为 NVARCHAR(字符串)。