19

我有:

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”,导致“未应用自动迁移,因为它会导致数据丢失”!

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

4

6 回答 6

37

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

AutomaticMigrationsEnabled = True
AutomaticMigrationDataLossAllowed = False

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

Update-Database -Force

或者

Update-Database -TargetMigration: X -Force

它应该可以解决您的问题。

IMO,您应该让 EF 决定如何处理您的列,这只是我的看法。

于 2013-09-19T15:57:25.393 回答
19

您应该编辑 up 和 down 方法并将 AddColumn 和 DropColumn 指令替换为 RenameColumn。

EF 无法检测您是在重命名列还是要删除一列并创建一个新列。

于 2013-09-19T16:02:35.303 回答
1

我这样解决了,只需输入:

更新-数据库-强制

于 2013-12-02T04:14:16.543 回答
1

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

于 2018-06-25T19:11:09.717 回答
1

我的问题是我刚刚做了另一个小改动,它本身就是迁移。在尝试更新时。检查它Update-Database -Name "peek",只是看看你是否也有。

于 2018-06-07T12:27:44.633 回答
-7

你必须换行

AutomaticMigrationDataLossAllowed = False

AutomaticMigrationDataLossAllowed = True

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

于 2014-01-15T07:16:34.870 回答