实体框架的核心问题与时间戳?无法将实体插入数据库

时间:2019-09-22 04:51:00

标签: c# entity-framework asp.net-core ef-core-2.2

我正在使用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,并且时间戳记在数据库中不可为空。

Timestamp column in database

Fluent mapping config

Call EF to save the entity

1 个答案:

答案 0 :(得分:1)

我相信您已经遇到了这样一个问题,即(合理的)假设SQL Server中的TIMESTAMP数据类型用于记录日期和时间,就像在其他数据库(如Oracle或Postgres)中那样-并非如此;它仅用于行版本控制,与日期或时间完全无关。您可能会争辩说它最初的名称不正确,而ms会同意-它现在是rowversion的同义词,时间戳将被删除

如果您只需要低精度的日期/时间记录,请使用DATETIME类型的列;如果需要更高的精度记录,请使用DATETIME2(7)

DateTime2 vs DateTime in SQL Server

相关问题