EF 5.“未应用自动迁移,因为它会导致数据丢失” - 仅更改了列名称

时间:2013-08-01 09:58:47

标签: entity-framework entity-framework-5 ef-migrations

我有:

AutomaticMigrationsEnabled = True
AutomaticMigrationDataLossAllowed = False

在我的配置文件中,现有模型是:

Public Property ID() As Integer
Public Property ERP_ArticleCode() As String
Public Property description() As String

我所做的只是将第3列从“description”更改为“am_description”并运行“update-database -verbose”,导致“未应用自动迁移,因为它会导致数据丢失”!

我不明白这一点......为什么我不能只更改列名并更新数据库 - 这应该不是数据存储问题,是吗?我做错了吗?

6 个答案:

答案 0 :(得分:34)

以下代码不是运行迁移所必需的:

AutomaticMigrationsEnabled = True
AutomaticMigrationDataLossAllowed = False

并且,根据这篇文章(from entityframework codeplex),这是一个EF错误,您可以在迁移中使用-Force属性忽略此错误。

Update-Database -Force

Update-Database -TargetMigration: X -Force

它可以解决您的问题。

IMO,你应该让EF决定你的专栏是什么,只是我的意见。

答案 1 :(得分:19)

您应该编辑您的up和down方法,并使用RenameColumn替换AddColumn和DropColumn指令。

EF无法检测您是否正在重命名某个列,或者您是否要删除一个列并创建一个新列。

答案 2 :(得分:1)

我解决了这个问题,只需输入:

  

更新 - 数据库 - 强制

答案 3 :(得分:0)

我的问题是,我只是进行了另一项小改动,而这本身就是一次迁移。在尝试更新时。用Update-Database -Name "peek"检查一下,看看你是否也有。

答案 4 :(得分:0)

当我将迁移应用于并行分支中的数据库时,我也看到了这一点,我的当前分支不了解该信息,并且我尝试还原为一些较旧的迁移。最好的解决方案是切换回创作分支,并还原到两个分支之间的最新通用迁移。

答案 5 :(得分:-7)

您必须更改行

AutomaticMigrationDataLossAllowed = False

AutomaticMigrationDataLossAllowed = True

注意:请注意仅在开发环境中使用true,因为在部署生产后可能会导致数据丢失。