【发布时间】:2020-04-21 09:15:29
【问题描述】:
尝试对具有某些 DateTimeOffset 成员的对象执行 dotnet ef 数据库更新。但我收到以下错误:
从字符转换日期和/或时间时转换失败 字符串。
这是我试图映射到 sql 的模型:
public int SessionId { get; set; }
public int SpeakerId { get; set; }
public string Title { get; set; }
public TimeSpan Length { get; set; }
public DateTimeOffset ScheduledAt { get; set; }
public DateTimeOffset Submitted { get; set; }
public string Description { get; set; }
下面是我的 dbcontext 代码:
public DbSet<Core.Models.Session> Sessions { get; set; }
protected override void OnModelCreating (ModelBuilder modelBuilder) {
var dateTimeOffsetConverter = new ValueConverter<DateTimeOffset, string> (
v => v.ToString ("yyyy-MM-dd HH:mm:ss zzz"),
v => DateTimeOffset.Parse (v));
modelBuilder
.Entity<Core.Models.Session> ()
.Property (s => s.ScheduledAt)
.HasColumnType ("datetimeoffset");
modelBuilder
.Entity<Core.Models.Session> ()
.Property (s => s.Submitted)
.HasColumnType ("datetimeoffset");
modelBuilder.Entity<Core.Models.Session> ().HasData (MockSessionData.Sessions);
}
以下是为创建一些假数据而生成的 SQL 脚本:
INSERT INTO [Sessions] ([SessionId], [Description], [Length], [ScheduledAt], [SpeakerId], [Submitted], [Title])
VALUES (1, N'overview of new features of dotnet core 3.1', '00:40:00', '2020-08-03T13:00:00.0000000+01:00', 1, '2019-12-03T13:00:00.0000000+01:00', N'dotnet core 3.1');
我尝试使用生成的脚本但 dotnet ef 手动将数据插入到 sql 中,但我得到了同样的错误。当我使用 SQL CAST() 方法使用以下格式时,我确实设法让它工作:
CAST('2019-12-03 13:00:00.0000000 +01:00' AS datetimeoffset)
但我不确定如何使用 ef core 或是否有可能做到这一点?
我正在使用 sql server docker 容器。
系统规格:
dotnet 核心 3.1
SQL Server 2017 (RTM-CU13) (KB4466404) - 14.0.3048.4 (X64)
与代码 1.44.2
【问题讨论】:
标签: c# .net visual-studio-code sql-server-2017 ef-core-3.1