sql-server - 生成的值如何用于 Entity Framework Core (SQL Server)
问题描述
我正在EF Core 3.1
与SQL 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 来获取Guid
值,而是复制了算法本身并创建了Guid
服务器端。这是有道理的,因为您要节省往返行程。
你可以在这里找到算法。
推荐阅读
- java - 如何知道 flatbuffer 消息中是否缺少字段?
- python-3.x - 如何在 Python Seaborn 的箱线图中指定 x 轴上的平均线和中线颜色以及组标签?
- c# - 如何为动态链接提供 URL(重写问题)
- django - ProgrammingError - 试图让图像出现在多个类别下
- react-native - React Native 滚动视图在屏幕更改后停止滚动
- flutter - 可以将 UniqueKey 传递给 ValueKey 而没有副作用吗?
- html - 浮动元素从 display:table 容器中的以下块元素“窃取”宽度
- clojure - 如何使用 Clojure Core Async 安排函数列表间隔“n”秒
- ruby-on-rails - 为我的 Rails 项目(Windows)从 sqlite 切换到 postgres
- node.js - GraphQL/ Apollo 服务器:无法访问嵌套对象