我有:
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”,导致“未应用自动迁移,因为它会导致数据丢失”!
我不明白这一点......为什么我不能只更改列名并更新数据库 - 这应该不是数据存储问题,是吗?我做错了吗?
答案 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,因为在部署生产后可能会导致数据丢失。