gpt4 book ai didi

c# - Entity Framework 更改 Id 类型

转载 作者:太空狗 更新时间:2023-10-29 23:51:04 24 4
gpt4 key购买 nike

我已将 Id 属性的类型从 Int 更改为 Guid,没有其他实体引用该 Id,并且我已经从数据库中手动删除了该实体的所有记录,我生成的迁移类如下所示:

public override void Up()
{
AlterColumn("dbo.RoutineExercises", "RoutineExerciseId", c => c.Guid(nullable: false));
}

public override void Down()
{
AlterColumn("dbo.RoutineExercises", "RoutineExerciseId", c => c.Int(nullable: false, identity: true));
}

当我运行更新数据库命令时出现此错误:

The object 'PK_dbo.RoutineExercises' is dependent on column 'RoutineExerciseId'. ALTER TABLE ALTER COLUMN RoutineExerciseId failed because one or more objects access this column.

我的 FluentAPI 配置如下所示:

 modelBuilder.Entity<RoutineExercise>().HasKey(r => r.RoutineExerciseId);
modelBuilder.Entity<RoutineExercise>()
.HasRequired(r => r.Exercise)
.WithMany()
.HasForeignKey(r => r.ExerciseId)
.WillCascadeOnDelete(true);

modelBuilder.Entity<RoutineExercise>()
.HasRequired(r => r.Routine)
.WithMany()
.HasForeignKey(r => r.RoutineId)
.WillCascadeOnDelete(true);

如何在不删除整个数据库的情况下解决这个问题?

最佳答案

您可以尝试分阶段进行迁移 - 我不确定,但您流畅的配置会导致根据您要更改的字段创建主键,而迁移向导无法考虑需要删除主键将字段转换为 guid,然后重建一个新的主键。

所以我的建议是分步进行迁移:1.从routineexerciseid中删除haskey并将其移动到另一个字段或创建一个新的复合键-ef需要一个主键2.移动主键后,您应该可以更改列3. 最后恢复该列的主键。

或者创建一个全新的列作为主键的 guid,删除旧列,然后根据需要重命名新列

关于c# - Entity Framework 更改 Id 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24496753/

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