首页 > 解决方案 > 存储在数据库中的 EF 迁移与原始代码不同

问题描述

我有 EF 代码第一次迁移,当我应用它时,它应该将用于应用向下迁移的脚本存储在数据库中。但是,当我从不包含迁移代码的应用程序版本应用向下迁移时,它似乎包含与原始迁移不同的脚本。

迁移代码:

DropColumn("dbo.AppLogEntries", "Id");
AddColumn("dbo.AppLogEntries", "Id", c => c.Guid(nullable: false, defaultValueSql: "newsequentialid()"));

从 PMC 生成的脚本:

ALTER TABLE [dbo].[AppLogEntries] DROP COLUMN [Id]
ALTER TABLE [dbo].[AppLogEntries] ADD [Id] [uniqueidentifier] NOT NULL DEFAULT newsequentialid()

应用脚本:

ALTER TABLE [dbo].[AppLogEntries] ALTER COLUMN [Id] [uniqueidentifier] NOT NULL

整个向下迁移脚本在代码中迁移的分支和另一个分支上看起来不同,当我在迁移的分支上应用向下迁移时,它是从数据库中获取的,详细日志看起来与生成的完全一样脚本

在存储向下脚本之前是否进行了一些“优化”,或者我做错了什么?

编辑:经过更多调查,似乎向下迁移的脚本根本没有存储在数据库中(或者在应用时被忽略)如果您在迁移中添加一些依赖于模型更改的 sql 语句,您可以看到它,然后在源分支上生成的脚本包含这些语句,而在另一个分支上,它完全缺少它们

标签: entity-frameworkentity-framework-6

解决方案


推荐阅读