gpt4 book ai didi

entity-framework - 如何更改 Entity Framework 6.1 Code First 模型中的聚集索引并将其应用到 Azure 数据库

转载 作者:行者123 更新时间:2023-12-04 08:32:42 25 4
gpt4 key购买 nike

使用 Entity Framework 6.1 代码优先模型,将表上的聚集索引从默认 ID 更改为另一组列的最佳方法是什么。 Azure 不允许没有聚集索引的表。

  public partial class UserProfile 
{
public override Guid ID { get; set; }

[Index( "CI_UserProfiles_UserID", IsClustered = true)]
public Guid UserID { get; set; }

[Required]
public Guid FieldID { get; set; }

[Required]
[StringLength(400)]
public string Value { get; set; }
}

在表UserProfiles上,ID已经是主键和聚集索引。添加

[Index( "CI_UserProfiles_UserID", IsClustered = true)] 

到 UserID 创建此迁移:

CreateIndex("dbo.UserProfiles", "UserID", clustered: true, name: "IX_UserProfiles_UserID");

执行迁移会生成以下错误:

Cannot create more than one clustered index on table 'dbo.UserProfiles'. Drop the existing clustered index 'PK_dbo.UserProfiles' before creating another.

最佳答案

要解决您的问题,生成迁移文件后,您必须修改生成的代码,通过分配 false 禁用主键的聚集索引。值为 clustered PrimaryKey的参数.

修改后,您的迁移文件中必须包含如下内容:

CreateTable(
"dbo.UserProfiles",
c => new
{
Id = c.Guid(nullable: false),
UserID = c.Guid(nullable: false),
FieldID = c.Guid(nullable: false),
Value = c.String(nullable: false, maxLength: 400),
})
.PrimaryKey(t => t.Id, clustered: false)
.Index(t => t.UserID, clustered: true, name: "CI_UserProfiles_UserID");

这在OnModelCreating中没有完成。像 Manish Kumar 所说的那样使用 Fluent API 的方法,但是在迁移文件中。使用 Add-Migration 时创建的文件命令。

现有数据库

正如您在评论中所说,您的数据库已经存在。执行Add-Migration后命令,您将在 DbMigration 上看到这一行文件在您的 Up()方法:

public override void Up()
{
CreateIndex("dbo.UserProfiles", "UserID", clustered: true, name: "CI_UserProfiles_UserID");
}

您必须修改Up()获得此代码的方法:

public override void Up()
{
this.Sql("ALTER TABLE dbo.UserProfiles DROP CONSTRAINT \"PK_dbo.UserProfiles\"");
this.Sql("ALTER TABLE dbo.UserProfiles ADD CONSTRAINT \"PK_dbo.UserProfiles\" PRIMARY KEY NONCLUSTERED (Id);");
this.CreateIndex("dbo.UserProfiles", "UserID", clustered: true, name: "CI_UserProfiles_UserID");
}

在上面的代码中,我假设创建的聚集索引在数据库中名为PK_dbo.UserProfiles。如果没有,则在此位置输入正确的名称。

关于entity-framework - 如何更改 Entity Framework 6.1 Code First 模型中的聚集索引并将其应用到 Azure 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33765908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com