В моем приложении я использую Entity Framework с подходом, основанным на коде, и в каждой таблице у меня есть свойство LastModificationTime
для проверки DbConcurrency.
Этот столбец в моей базе данных имеет тип DateTime
(это обязательно, и я не могу использовать DateTime2
).
Я использую FluentApi, и объявление для каждого объекта выглядит так:
this.Property(e => e.LastModificationTime).HasColumnName("MODIFQUAND").HasColumnType("datetime").IsConcurrencyToken();
В SQL Server 2012 обновление на моем объекте работало, но мне пришлось перенести базу данных на SQL Server 2016, и теперь обновление больше не работает из-за этого столбца.
Запрос на обновление моей сущности:
UPDATE [dbo].[ADRRESS]
SET [BO_ID] = NULL, [DN_CONCAT] = @0, [MODIFQUAND] = @1, [MODIFQUI] = @2
WHERE (([ADR_ID] = @3) AND ([MODIFQUAND] = @4))
-- @0: ' ' (Type = AnsiString, Size = -1)
-- @1: '08/05/2018 10:55:03' (Type = DateTime2)
-- @2: '5263' (Type = Int32)
-- @3: '4333555' (Type = Int32
-- @4: '15/12/2017 10:04:27' (Type = DateTime2)
Я получаю это исключение:
System.Data.Entity.Infrastructure.DbUpdateConcurrencyException 'в EntityFramework.dll
Сущность не найдена из-за точности DateTime.
Я не понимаю, какие изменения в SQL Server 2016 связаны с моей проблемой. Я обнаружил похожую проблему, но без ответа или одного ответа следует изменить тип столбца и использовать datetime2
, но я не могу.
Спасибо за вашу помощь