Код Entity Framework для первой миграции руководствуется NewId вместо NewSequentialId - PullRequest
0 голосов
/ 11 декабря 2018

Мы используем EF6 с первыми миграциями кода, указывающими на Azure SQL.Мы начали использовать некоторый Guid как для первичных ключей, так и для первичных ключей int.
Первичный ключ:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }

Рядом с PK:

[Index, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid PolymorphicId { get; set; }

Когда ясгенерировать миграцию я получаю следующим образом (соответственно):

Id = c.Guid(nullable: false, identity: true),
PolymorphicId = c.Guid(nullable: false, identity: true),

Ожидание : для SQL сгенерированы значения по умолчанию newsequentialid

Фактически происходит :

[Id] [uniqueidentifier] NOT NULL DEFAULT newid(),
[PolymorphicId] [uniqueidentifier] NOT NULL DEFAULT newid(),

Как заставить мои миграции EF генерировать с newsequentialid вместо newid?Все, что я посмотрел в Интернете, говорит о том, что они должны генерироваться с newsequentialid.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

При нацеливании на Azure SqlServerMigrationSqlGenerator по умолчанию будет иметь значение «newid ()».При нацеливании на Sql Server 2005 или более поздней версии по умолчанию будет использоваться «newsequentialid ()».Источник: GitHub SqlServerMigrationSqlGenerator.cs

Необязательное исправление: создайте пользовательский SqlGenerator, унаследовав SqlServerMigrationSqlGenerator, переопределите GuidColumnDefault

Необязательное исправление: измененный сгенерированный миграцией JF, установка defaultValueSql

0 голосов
/ 11 декабря 2018

Вы можете попробовать установить sql, используемый генерацией ключа столбца сервера sql в вашем скрипте миграции, я считаю, что это должно выглядеть примерно так:

Id = c.Guid(nullable: false, identity: true, defaultValueSql: "newsequentialid()")
...