1

我不知道我做了什么,但发布到蔚蓝的,当我得到这个错误:EF代码优先自动迁移完全搞砸

Automatic migration was not applied because it would result in data loss. 

现在,这是非常distubing。我的模型与我的数据库100%匹配 - 如果我强制执行,那么是否有可能会丢失数据?我真的很困惑现在该做什么。

这么多的自动迁移:S没有太多的自动化:) 我认为我的错误是我创建了新模型,发布了它,EF为它们创建了新表格。然后我记得我忘了把模型添加到我的DbContext。所以我添加了新的DbSets上下文并发布。这可能是出错的地方。但是再一次,我不知道如果EF不是POCO类,或者它们被称为什么,EF就会向数据库添加模型。可能是一些外键触发..不知道。无论如何,我对我的代码进行了撤销狂热,并删除了所有新创建的表格和内容,以使我可以将其转到我的出发点。我认为这可能会解决它。但是,不要愚蠢的我。

任何想法从哪里开始在这个问题上?我要跳下悬崖我失去了我的数据:)

回答

2

您可以让EF为您创建SQL,以便您可以手动实施迁移。在包管理器控制台中输入:

update-database -v -f -script 

它将打开一个新窗口,其中包含可以查看的SQL,然后直接将自己应用于数据库。输入迁移历史记录的最后一行将允许DbContext知道它正在查看正确的版本。

+0

听起来不错。我会试试 – 2013-02-27 18:14:30

+0

其实我必须删除除最后一行'INSERT INTO [__MigrationHistory]'以外的所有内容。但后来它说“无效的对象名称__MigrationHistory”。“ ??? – 2013-02-27 18:20:00

+0

上面几行将是__MigrationHistory表的创建表脚本,用它在systables中创建历史记录表。 – 2013-02-27 18:39:04

1

首先进行备份!如果您使用的是SQL Compact,那么特别容易 - 只需复制文件即可。 或与LocalDB或SQL Server,分离,复制文件,附加..

但为了给予更多的帮助,生成该脚本可能仍然需要寻找可能导致数据丢失的原因。我发现添加一个新列成为表中的主键可能会丢失数据,即使保留了原始列,这是因为在新列上实施了NOT NULL约束,导致(全部)行被删除。