使用 Code First 重命名 EF 中的列
Rename a column in EF with Code First
我重命名了 class 中的一个列。看起来像这样。
public class clsClassForWhosebug
{
[Column(TypeName = "varchar"), StringLength(150)]
public string Name { get; set; }
由于结构发生变化,我不得不重命名它。所以我删除了那一行并添加了新的属性。之后我创建了一个新的迁移文件来准备我的数据库更新,并在文件中他想删除旧列并添加新列。好吧,我将删除更改为重命名,因为数据库中仍有数据。一滴它就会消失。
新的迁移文件:
public partial class _100126_2 : DbMigration
{
public override void Up()
{
RenameColumn("dbo.tbClassForWhosebug", "ClassForWhosebug_Name", "ClassForWhosebug_NewName");
}
public override void Down()
{
RenameColumn("dbo.tbClassForWhosebug", "ClassForWhosebug_NewName", "ClassForWhosebug_Name");
}
}
启动数据库更新后,我查看了我的 class 并且属性没有改变。它仍然命名为 "Name" 而不是 "NewName"。我如何更改它而不让 EF 认为我删除并添加了一个列?
您需要按以下顺序进行此更改:
- 将实体中的
Name
属性 重命名为 NewName
- 向您的项目添加新迁移
- 更改迁移以执行重命名而不是 Drop/Create,但是 仅更改
Up
/Down
方法的内容
- 编译并运行迁移
我就是这样做了好几次都没有问题。重要的是在创建时不要触摸与迁移关联的模型快照。
P.S.: 如果我没记错的话,如果满足某些(对我来说未知的)约束,EF 甚至会检测到重命名,因为我认为在执行简单的 property/column重命名。
我重命名了 class 中的一个列。看起来像这样。
public class clsClassForWhosebug
{
[Column(TypeName = "varchar"), StringLength(150)]
public string Name { get; set; }
由于结构发生变化,我不得不重命名它。所以我删除了那一行并添加了新的属性。之后我创建了一个新的迁移文件来准备我的数据库更新,并在文件中他想删除旧列并添加新列。好吧,我将删除更改为重命名,因为数据库中仍有数据。一滴它就会消失。
新的迁移文件:
public partial class _100126_2 : DbMigration
{
public override void Up()
{
RenameColumn("dbo.tbClassForWhosebug", "ClassForWhosebug_Name", "ClassForWhosebug_NewName");
}
public override void Down()
{
RenameColumn("dbo.tbClassForWhosebug", "ClassForWhosebug_NewName", "ClassForWhosebug_Name");
}
}
启动数据库更新后,我查看了我的 class 并且属性没有改变。它仍然命名为 "Name" 而不是 "NewName"。我如何更改它而不让 EF 认为我删除并添加了一个列?
您需要按以下顺序进行此更改:
- 将实体中的
Name
属性 重命名为NewName
- 向您的项目添加新迁移
- 更改迁移以执行重命名而不是 Drop/Create,但是 仅更改
Up
/Down
方法的内容 - 编译并运行迁移
我就是这样做了好几次都没有问题。重要的是在创建时不要触摸与迁移关联的模型快照。
P.S.: 如果我没记错的话,如果满足某些(对我来说未知的)约束,EF 甚至会检测到重命名,因为我认为在执行简单的 property/column重命名。