我注意到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
操作有关吗?也许是因为手动更改了迁移脚本?
请问,有没有人知道如何让实体框架了解我已经更新了数据库?