首页 > 解决方案 > Entity Framework Core 是否会在重命名模型属性时删除旧列?

问题描述

第一个问题:在 Entity Framework Core (EF Core) 中,如果重命名模型中的属性,EF 是否会删除数据库中的旧列?还是 EF 只是用新名称创建一个新列,而不管旧列?

第二个问题:如果 EF Core 确实删除了旧列,它是否会在存在即将被清除的数据时发出警告?

标签: sqlentity-framework-core

解决方案


简短的回答是 - 不。它不会删除该列。

为了验证,我创建了一个名为 Book 的模型。

public class Book
{
    public int BookId { get; set; }
    public string Name { get; set; }
}

我添加了迁移并更新了数据库。然后我在表中放了几条记录。

Name然后我将模型中的属性更改为Description.

当我添加另一个迁移时,这里是Up方法中的相关代码。

 migrationBuilder.RenameColumn(
    name: "Name",
    table: "Books",
    newName: "Description");

这被翻译成下面的 TSQL

 EXEC sp_rename N'[Books].[Name]', N'Description', N'COLUMN';

所以 - 它不会删除和添加,它只是重命名现有列。

再次更新数据库后,我的记录仍然存在,其中包含我在列为 时插入的值Name


推荐阅读