【发布时间】:2019-04-11 01:29:09
【问题描述】:
在我的项目中,我在基于初始版本和更新后创建的 Migrations 文件夹中有两个 EF 核心迁移文件。初始迁移(“Initial”)包含许多 CreateTable 语句,而第二次迁移(“Cleanup”)在其 Up 方法中仅包含少数 DropColumn 语句。
我的数据库是通过在第一次和第二次迁移之间调用context.Database.EnsureCreated() 创建的,即我现在想执行第二次迁移。
但是,如果我打电话给dotnet ef database update Cleanup,我会收到一个错误:
Applying migration '20190409043916_Initial'.
Failed executing DbCommand (6ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE [LongRunningOperations] (
[Id] bigint NOT NULL IDENTITY,
[Start] datetime2 NOT NULL,
[End] datetime2 NULL,
[Discriminator] nvarchar(max) NOT NULL,
CONSTRAINT [PK_LongRunningOperations] PRIMARY KEY ([Id])
);
System.Data.SqlClient.SqlException (0x80131904): There is already an object named 'LongRunningOperations' in the database.
显然,EF 也希望应用第一次迁移。是否有指定数据库基本版本的选项?我可以采取其他措施来避免执行“初始”迁移吗?
一个更一般的问题可能有助于我理解正在发生的事情:EF Core 如何确定基本版本是什么,即必须执行哪些迁移?
【问题讨论】:
-
对 EF 不太熟悉,但大多数数据库迁移都有历史表或其他东西来跟踪应用的迁移。检查并添加该迁移记录,它应该认为它已经应用了它。
-
@JAZ 是正确的,您要查找的表是
__EFMigrationsHistory并且MigrationId应该与您的迁移名称匹配(例如“20190410160507_LongRunningOperations”) -
谢谢,就是这样。如果您愿意,可以将此作为答案。
标签: c# entity-framework-core entity-framework-migrations