我正在使用Entity Framework Core,并试图将一个实体(带有时间戳)插入数据库,但是会引发异常
无法在时间戳列中插入显式值...
我在插入时从EF获取了生成的SQL,并尝试手动运行该代码,但是它不起作用。
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问题吗?因为我检查了流利语是否包含IsRowVersion
,并且时间戳记在数据库中不可为空。
答案 0 :(得分:1)
我相信您已经遇到了这样一个问题,即(合理的)假设SQL Server中的TIMESTAMP数据类型用于记录日期和时间,就像在其他数据库(如Oracle或Postgres)中那样-并非如此;它仅用于行版本控制,与日期或时间完全无关。您可能会争辩说它最初的名称不正确,而ms会同意-它现在是rowversion的同义词,时间戳将被删除
如果您只需要低精度的日期/时间记录,请使用DATETIME
类型的列;如果需要更高的精度记录,请使用DATETIME2(7)