在Entity Framework中的数据库迁移期间重命名列

时间:2016-12-28 14:20:43

标签: c# sql-server entity-framework ef-migrations

我注意到db迁移的奇怪之处,我无法修复。

请帮忙。

我有一个班级

public class Subscription : BaseEntity
{
    ...
    [Index("IX_Subscription_Status", IsUnique = false)]
    public int? Status { get; set; }
    ...
}

我将属性Status重命名为BeforeStatus并在Visual Studio中运行Add-Migration命令。

它生成:

DropIndex(...IX_Subscription_Status...);
DropColumn(... Status ...);
AddColumn(... BeforeStatus ...);
CreateIndex(...IX_Subscription_BeforeStatus...);

我不想删除列,所以我将迁移脚本更改为

DropIndex(...IX_Subscription_Status...);
RenameColumn(...,Status,BeforeStatus)
CreateIndex(...IX_Subscription_BeforeStatus...);

并运行Update-Database次迁移。它没有错误地传递并更改了数据库。

我在课程

中添加了一个新属性AfterStatus
[Index("IX_Subscription_AfterStatus", IsUnique = false)]
public int? AfterStatus { get; set; }

并运行Add-Migration命令。它会生成:

AddColumn(... AfterStatus  ...);
CreateIndex(...IX_Subscription_AfterStatus...);

我运行了Update-Database迁移,它没有错误地通过并更改了数据库。

所以从我的观点来看,一切都是正确的,db对应c#代码。我检查了__MigrationHistory表,它包含所有最新的迁移。

但是,当我运行代码时,它失败并出现DbContext错误:

  

自创建数据库以来,支持'MyContext'上下文的模型已更改。考虑使用Code First Migrations来更新数据库

如果我再次运行Add-Migration命令,它会生成:

DropIndex(...IX_Subscription_Status...);
DropColumn(... Status ...);
AddColumn(... BeforeStatus...);
CreateIndex(...IX_Subscription_BeforeStatus...);
AddColumn(... AfterStatus...);
CreateIndex(...IX_Subscription_AfterStatus...);

为什么呢?为什么会生成迁移脚本?此错误与RenameColumn操作有关吗?也许是因为手动更改了迁移脚本?

请问,有没有人知道如何让实体框架了解我已经更新了数据库?

0 个答案:

没有答案