2016-05-15 54 views
2

我正在使用实体框架6的MVC 5,自动迁移被禁用,没有种子被使用,我正在脚本化我的更新到生产。实体框架6刚删除我的数据库?

我会举起手来说我对MVC和EF相当陌生。

我刚上传了一个新的代码库到生产环境中,忘记了模型已经改变。当我去登录到新版本时,它会抛出错误页面。好吧,我忘了编写最新的迁移脚本 - 我这样做了,连接到SSMS,发现数据库没有了。

轻微的恐慌,从备份恢复(我不是那么愚蠢!)并应用迁移,一切都开始工作,因为它应该。

为什么我的代码在模型更改时删除整个数据库?如上所述,自动迁移被禁用,并且这种行为在开发机器上不会发生,它们会抛出有关已更改模型的错误。


编辑补充:虽然看着费尔南达的回答初始化模式,他们没有说“删除数据库,然后什么也不做”。我的数据库被丢弃了,MDF和LDF消失了,没有任何事情是SSMS,没有任何东西被重新创建。如果一个空白数据库在它的位置被创建,我会理解更多。也就是说,用户帐户在数据库上有DBO但不是主数据库,所以可以删除数据库但不能创建新数据库?

+1

我不知道答案,但我总是确保将'Database.SetInitializer (null);'放在我的上下文类的OnModelCreating()中。 –

+0

似乎谨慎。我觉得我的惊讶之处在于它不会在任何开发环境中发生。 – RemarkLima

回答

2

在代码优先阅读本有关数据库初始化策略:

http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-first.aspx

检查你的DbContext初始化,并确保该选项DropCreateDatabaseIfModelChanges是评论

//Database.SetInitializer(new DropCreateDatabaseIfModelChanges( ));

+0

我没有初始化程序集,所以我认为它是默认的'CreateDatabaseIfNotExists' - 这是我在开发环境中看到的确切行为。 – RemarkLima

+0

您也可以在配置文件中设置db初始值设定项。检查每个环境。都是平等的吗? –

+0

你的意思是Web.config? – RemarkLima