我们有一个包含多个 EntityFramework 上下文的项目,每个上下文都启用了迁移。现在,当我们使用创建完整的迁移脚本时,Update-Database -SourceMigration $initialDatabase -script
我们会为每个上下文获取一个脚本。
然而,这个脚本以这样的开头:
DECLARE @CurrentMigration [nvarchar](max)
IF object_id('[dbo].[__MigrationHistory]') IS NOT NULL
SELECT @CurrentMigration =
(SELECT TOP (1)
[Project1].[MigrationId] AS [MigrationId]
FROM ( SELECT
[Extent1].[MigrationId] AS [MigrationId]
FROM [dbo].[__MigrationHistory] AS [Extent1]
WHERE [Extent1].[ContextKey] = N'Some.Configuration.Here'
) AS [Project1]
ORDER BY [Project1].[MigrationId] DESC)
IF @CurrentMigration IS NULL
SET @CurrentMigration = '0'
IF @CurrentMigration < '201506111916518_InitialCreate'
BEGIN
...
<migration code here>
...
END
注意它是如何使用 ContextKey 获取当前迁移的,如果没有找到它,它将执行第一次迁移。
事情变得很棘手,因为第一次迁移包含创建__MigrationHistory
表的代码,当您已经运行第一个脚本时,它显然已经存在。
这是一些边缘情况错误还是我在这里做错了什么?
提前致谢