EF Code第一次自动迁移完全搞砸了

时间:2013-02-27 18:07:23

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

我不确定我做了什么,但是在发布到azure时出现了这个错误:

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

现在这非常令人沮丧。我的模型100%匹配我的数据库 - 如果我强迫它有可能会丢失数据?我真的很困惑现在要做什么。

自动迁移太多了:S自动化程度不高:) 我认为我的错误是我创建了新模型,发布了它并且EF为它们创建了新表。然后我记得我忘记了将模型添加到我的DbContext。所以我将新的DbSets添加到上下文并发布。这可能是它出错的地方。但话说回来,我不知道如果EF不是POCO类或者它们被调用的话,EF会将模型添加到数据库中。可能是一些外键触发.. dunno。无论如何,我对我的代码进行了疯狂的删除,并删除了所有新创建的表格以及让我到达起点的东西。我认为这可能会解决它。但是没有人愚弄我。

任何想法从哪里开始这个问题?我会跳下悬崖我丢失了数据:)

2 个答案:

答案 0 :(得分:2)

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

update-database -v -f -script

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

答案 1 :(得分:1)

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

但是为了提供更多帮助,生成该脚本可能仍然会让您查找可能导致数据丢失的内容。我发现添加一个新列成为表中的主键可能会丢失数据,即使保留了原始列,因为在新列上强制执行NOT NULL约束导致(所有)行被删除。