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

The*_*ook 19 entity-framework ef-migrations entity-framework-5

我有:

AutomaticMigrationsEnabled = True
AutomaticMigrationDataLossAllowed = False
Run Code Online (Sandbox Code Playgroud)

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

Public Property ID() As Integer
Public Property ERP_ArticleCode() As String
Public Property description() As String
Run Code Online (Sandbox Code Playgroud)

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

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

Bet*_*rte 35

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

AutomaticMigrationsEnabled = True
AutomaticMigrationDataLossAllowed = False
Run Code Online (Sandbox Code Playgroud)

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

Update-Database -Force
Run Code Online (Sandbox Code Playgroud)

要么

Update-Database -TargetMigration: X -Force
Run Code Online (Sandbox Code Playgroud)

它应该解决你的问题.

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

  • 你真的和真的**忽略**-Force或AutomaticMigrationDataLossAllowed = True的错误.这是一个*非常危险的东西,放入将达到生产的代码.确保*您要忽略该问题,因为如果您不小心,可能会丢失生产数据. (6认同)

Swe*_*ell 19

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

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

  • 如果您使用的是SQL Server Compact,则无法使用."SQL Server Compact不支持直接列重命名.要重命名SQL Server Compact中的列,您需要重新创建它." (3认同)