我不确定我做了什么,但是在发布到azure时出现了这个错误:
Automatic migration was not applied because it would result in data loss.
现在这非常令人沮丧。我的模型100%匹配我的数据库 - 如果我强迫它有可能会丢失数据?我真的很困惑现在要做什么。
自动迁移太多了:S自动化程度不高:)
我认为我的错误是我创建了新模型,发布了它并且EF为它们创建了新表。然后我记得我忘记了将模型添加到我的DbContext
。所以我将新的DbSets
添加到上下文并发布。这可能是它出错的地方。但话说回来,我不知道如果EF不是POCO类或者它们被调用的话,EF会将模型添加到数据库中。可能是一些外键触发.. dunno。无论如何,我对我的代码进行了疯狂的删除,并删除了所有新创建的表格以及让我到达起点的东西。我认为这可能会解决它。但是没有人愚弄我。
任何想法从哪里开始这个问题?我会跳下悬崖我丢失了数据:)
答案 0 :(得分:2)
您可以让EF为您创建SQL,这样您就可以手动实现迁移。在包管理器控制台中输入:
update-database -v -f -script
它将打开一个包含您可以查看的SQL的新窗口,然后直接应用于数据库。输入迁移历史记录的最后一行将允许DbContext知道它正在查看正确的版本。
答案 1 :(得分:1)
首先进行备份!如果您使用SQL Compact,则特别容易 - 只需复制文件即可。 或者使用LocalDB或SQL Server,分离,复制文件,附加..
但是为了提供更多帮助,生成该脚本可能仍然会让您查找可能导致数据丢失的内容。我发现添加一个新列成为表中的主键可能会丢失数据,即使保留了原始列,因为在新列上强制执行NOT NULL约束导致(所有)行被删除。