Entity Framework Основная проблема с отметкой времени?Невозможно вставить объект в БД - PullRequest
0 голосов
/ 22 сентября 2019

Я использую Entity Framework Core и пытаюсь вставить объект (с отметкой времени) в базу данных, но выброшено исключение

Невозможно вставить явное значение в столбец отметки времени ...

Я получил сгенерированный SQL из EF при вставке и попытался запустить этот код вручную, но он не работает.

exec sp_executesql N'SET NOCOUNT ON;
                     INSERT INTO [PersonalLookup] ([Description], [IsDeleted], [LookupTypeId], [ProfileId], [Timestamp])
                     VALUES (@p0, @p1, @p2, @p3, @p4);',
           N'@p0 nvarchar(4000),@p1 bit,@p2 int,@p3 int,@p4 varbinary(8000)',
           @p0=N'test',@p1=0,@p2=1,@p3=1,@p4=NULL

Когда я запускаю приведенный ниже код SQL, система возвратила с той же ошибкой о отметке времени.Это проблема EF?Поскольку я проверяю, что в файле Fluent есть IsRowVersion, а метка времени не может быть пуста в базе данных.

Столбец метки времени в базе данных

Конфигурация отображения флюента

Вызовите EF для сохранения объекта

1 Ответ

1 голос
/ 22 сентября 2019

Я полагаю, что вы столкнулись с проблемой принятия (разумного) предположения о том, что тип данных TIMESTAMP в SQL Server предназначен для записи дат и времени, аналогичных тем, которые используются в других базах данных, таких как Oracle или Postgres, - это не так;он предназначен для контроля версий строк и вообще не связан с датами или временем.Вы могли бы утверждать, что изначально оно было плохо названо, и ms согласился бы - теперь это синоним для обращения строк, и метка времени будет отброшена

Вместо этого используйте тип DATETIME для своего столбца, если вам нужна только дата / дата низкой точности /запись времени или DATETIME2(7), если вам нужна запись с более высокой точностью

DateTime2 против DateTime в SQL Server

...