在Sql Azure中使用EF迁移时更改主键

我更改了实体中的主键.当我尝试在SQl Azure上运行迁移时,它失败并且“此版本的SQL Server不支持”没有聚簇索引的表.请创建聚簇索引并重试.“

 public override void Up()
 {
    DropPrimaryKey("User", new[] { "Id" });
    AddPrimaryKey("User", "Username");
 }

我怎么解决这个问题?我唯一能想到的是创建我自己的ChangePrimaryKey方法,该方法以某种方式静默创建具有正确主键的临时表,复制数据,然后替换原始.

最佳答案 SQL Azure不支持没有聚簇索引的表.这意味着您无法在没有cluestered索引的情况下创建新表,也无法删除现有表上的现有聚簇索引. Windows Azure在每个表上都需要聚簇索引.

根据Cihan Biyikoglu(MSFT),一种解决方法是使用您喜欢的索引结构创建一个新表,移动数据并在单个事务中重命名表.

使用存储过程,您可以执行以下操作:

begin
 tran
 exec
 sp_rename 'db1','db1_old'
 exec
 sp_rename 'db1_new','db1'
 commit
tran
点赞