我的数据库中有一个要使用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),但存在相同的错误。
有什么主意吗?
答案 0 :(得分:1)
也许您可以将日期检索为int型,然后使用C#将其转换为Datetime。为此,您可以使用2个属性StartInt和StartDate(该属性为只读)
答案 1 :(得分:0)
就像@ bradbury9暗示的那样,我会将视图更改为
DATEADD(MI, wf_activate, '1899-30-12') AS Start
这将使在调用数据库时已经开始一个datetime列。
使用问题中的视图,您首先要从DATEADD函数获取日期时间,然后使用CONVERT将其转换为NVARCHAR(字符串)。