【发布时间】:2019-07-01 07:02:37
【问题描述】:
我的数据库中有一个我想用 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),但同样的错误。
有什么想法吗?
【问题讨论】:
-
将日期存储为数据库中的日期,这将使您的生活更轻松
-
它是我无权访问的数据库。我只是可以存储我的观点并在那里做事。
-
1 - 您的 TSQL 不应返回字符串,而是返回 DateTime,2-
12/17/2018 12-17-2018绝不是正确的日期。我通常检查CAST and CONVERT doc.中的TSQL格式 -
如果您可以更改您的 VIEW 定义,请将其更改为以下内容:
convert(datetime, CONVERT(NVARCHAR, DATEADD(MI, wf_activate, '18991230'), 101))
标签: c# linq datetime view ef-core-2.1