Как сгенерированные значения работают для Entity Framework Core (SQL Server) - PullRequest
0 голосов
/ 27 февраля 2020

Я использую EF Core 3.1 с SQL Server провайдером. Если не указано иное, EF Core использует сгенерированные значения для ключей сущности. (Ключ генерируется провайдером, в данном случае SQL Server) В следующей документации page я нашел утверждение, что:

Например, при использовании SQL Server , значения будут автоматически генерироваться для свойств GUID (с использованием алгоритма SQL последовательного сервера 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 в запросе, что означает, что он получает его до генерации запроса. Но я не заметил каких-либо дополнительных вызовов в SQL Profiler.

Как сгенерированные значения работают за капотом?

1 Ответ

0 голосов
/ 06 марта 2020

Так что я неправильно истолковал документацию. На самом деле он не использует SQL Server для получения значения Guid, но скопировал сам алгоритм и создает Guid на стороне сервера. Что имеет смысл, поскольку вы экономите туда и обратно.

Вы можете найти алгоритм здесь .

...