我们将EF6与指向Azure SQL的代码优先迁移一起使用。我们已经开始将一些Guid用于主键以及与int主键一起使用。
主键:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
Alongside int 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具有新闻序列ID的默认值
实际上发生了:
[Id] [uniqueidentifier] NOT NULL DEFAULT newid(),
[PolymorphicId] [uniqueidentifier] NOT NULL DEFAULT newid(),
如何使我的EF迁移使用newsequentialid而不是newid生成?我在网上查询的所有内容都表明,它们应该使用新闻序列生成。
答案 0 :(得分:2)
在针对Azure时,SqlServerMigrationSqlGenerator将默认为“ newid()”。当针对本地Sql Server 2005或更高版本时,它将默认为“ newsequentialid()”。 来源:GitHub SqlServerMigrationSqlGenerator.cs
可选修补程序:创建一个自定义SqlGenerator,继承SqlServerMigrationSqlGenerator,重写GuidColumnDefault
可选修补程序:正如JFM所发布的那样,修改生成的迁移文件,并设置defaultValueSql
答案 1 :(得分:0)
您可以尝试在迁移脚本中设置sql服务器列密钥生成所使用的sql,我相信它的外观应与此类似:
Id = c.Guid(nullable: false, identity: true, defaultValueSql: "newsequentialid()")