EF Core - Ошибка преобразования при преобразовании даты и / или времени из строки символов - PullRequest
0 голосов
/ 21 апреля 2020

Попытка сделать tnet ef обновление базы данных для объекта, который имеет несколько членов DateTimeOffset. Но я получаю следующую ошибку:

Не удалось выполнить преобразование при преобразовании даты и / или времени из строки символов.

Вот модель, которую я пытаюсь сопоставить с 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');

Я пытался использовать сгенерированный скрипт, но делал tnet ef, чтобы вставить данные в sql вручную, но я получаю ту же ошибку. Мне удалось заставить его работать, когда я использовал следующий формат, используя метод SQL CAST():

CAST('2019-12-03 13:00:00.0000000 +01:00' AS datetimeoffset)

, но я не уверен, как это сделать с помощью ef core или если это вообще возможно?

Я использую sql сервер docker контейнер.

Системные характеристики:

do tnet core 3.1

SQL Server 2017 (RTM-CU13) (KB4466404) - 14.0.3048.4 (X64)

против кода 1.44.2

1 Ответ

0 голосов
/ 21 апреля 2020

Итак, я выяснил, что проблема не в смещении datetime, а во временном интервале, когда я добавлял другие значения временного интервала, превышающие день. В результате был вставлен скрипт, который форматировал бы значение временного интервала в «1,00: 30: 00». Это было причиной ошибки преобразования.

...