C# 具有时间戳的实体框架核心问题?无法将实体插入数据库
我正在使用EntityFrameworkCore并尝试将一个实体(带有时间戳)插入数据库,但抛出了一个异常 无法将显式值插入时间戳列 我在insert时从EF获得了生成的SQL,并尝试手动运行该代码,但它不起作用C# 具有时间戳的实体框架核心问题?无法将实体插入数据库,c#,entity-framework,asp.net-core,ef-core-2.2,C#,Entity Framework,Asp.net Core,Ef Core 2.2,我正在使用EntityFrameworkCore并尝试将一个实体(带有时间戳)插入数据库,但抛出了一个异常 无法将显式值插入时间戳列 我在insert时从EF获得了生成的SQL,并尝试手动运行该代码,但它不起作用 exec sp_executesql N'SET NOCOUNT ON; INSERT INTO [PersonalLookup] ([Description], [IsDeleted], [LookupTypeId], [ProfileId]
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
,并且时间戳在数据库中不可为空
我相信您遇到了这样一个问题,即(合理地)假设SQL Server中的时间戳数据类型是用于记录日期和时间的,就像其他数据库(如Oracle或Postgres)中的数据类型一样,它不是;它用于行版本控制,与日期或时间完全无关。你可能会争辩说它最初的名字不好,ms也会同意——它现在是rowversion的同义词,时间戳将被删除 如果只需要低精度的日期/时间记录,请使用列的
DATETIME
类型;如果需要更高精度的记录,请使用DATETIME2(7)
请发布表定义我在数据库中添加了时间戳字段,我使用了类型timestamp。我尝试手动添加一条记录,它成功了,但无法使用EF生成的代码,也无法发布您的流畅映射代码,以及您正在使用的本地类实体定义。如果您正在对行进行版本控制,请不要使用时间戳,使用ROWVERSION。显示您的表定义和客户端代码。我还在映射文件中添加了代码,当我调用EF向db添加新实体时,SQL Server没有RowVersion类型,它被更改为Timestamp。因为我检查了包含IsRowVersion的fluent,所以我猜OP希望有一个Timestamp列用于行版本控制。但是,如果我们没有看到“流利”的代码,我们就无法准确地理解它;让我们看看他发布的客户端代码和表定义-我仍然认为这可能是一个摇尾巴的例子