首页 > 解决方案 > 生成的值如何用于 Entity Framework Core (SQL Server)

问题描述

我正在EF Core 3.1SQL Server提供商一起使用。如果未指定,则EF Core使用生成的实体键值。(在这种情况下,密钥由提供者生成SQL Server)在以下文档页面中,我发现声明:

例如,使用 SQL Server 时,将为 GUID 属性自动生成值(使用 SQL Server 顺序 GUID 算法)

SQL Profiler用来调查 EF 核心生成的查询,我注意到为了添加它生成的实体如下SQL

exec sp_executesql N'SET NOCOUNT ON;
INSERT INTO [MySchema].[MyTable] ([Id],  ...)
VALUES (@p0, ...);
',N'@p0 uniqueidentifier, ...',@p0='B3DC06A3-2B58-46A0-9085-7A17B064433F', ... 

在这里我看到查询中已经有GUID查询,这意味着它在生成查询之前获取它。但我没有注意到任何 attidional 电话SQL Profiler

生成的值如何在幕后工作?

标签: sql-server.net-coreentity-framework-coreentity-framework-core-3.1

解决方案


所以我误解了文档。它实际上并没有使用 SQL Server 来获取Guid值,而是复制了算法本身并创建了Guid服务器端。这是有道理的,因为您要节省往返行程。

你可以在这里找到算法。


推荐阅读