在生产环境中使用DropCreateDatabaseIfModelChanges

时间:2011-05-10 22:41:53

标签: asp.net-mvc-3

我刚刚开始学习.NET MVC,所以这可能是一个愚蠢的问题,但我还没有找到一个好的答案。

我正在遵循Code First方法,使用Entity Framework为我构建数据库。我在Application_Start()方法中包含以下内容,以便允许我通过更改Model对象来编辑数据库。

Database.SetInitializer<ContactManagerDB>(new DropCreateDatabaseIfModelChanges<ContactManagerDB>());

我只是想知道如果我将此应用程序推送到生产环境然后对我的模型进行一些更改然后更新应用程序会发生什么?这真的会在生产环境中丢弃并重新创建数据库吗?

将更改推向生产环境的最佳做法是什么?使用Code First方法?

3 个答案:

答案 0 :(得分:18)

DropCreateDatabaseIfModelChanges应该只在开发的早期使用,而不是在生产机器上使用。如果您推送到生产计算机并进行了架构更改,则会丢失所有数据。

答案 1 :(得分:1)

您可以删除生产环境中的EdmMetadata表。在这种情况下,EF不会知道要与新模式进行比较的当前模式,因此它只是假设您知道自己在做什么而且它不会触及数据库模式。

答案 2 :(得分:0)

代码优先无法在保持数据完整性的同时升级数据库。