2011-05-10 77 views
15

我刚开始学习.NET MVC,所以这可能是一个愚蠢的问题,但我还没有找到一个好的答案。在生产环境中使用DropCreateDatabaseIfModelChanges

我遵循使用实体框架为我构建数据库的代码优先方法。我在Application_Start()方法中包含了以下内容,以便允许通过更改我的Model对象来编辑我的数据库。

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

我只是想知道如果我把这个应用到生产环境,然后做出我的模型进行一些更改,会发生什么,然后更新应用程序?这真的会在生产环境中下降并重新创建数据库吗?

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

+3

我已经包裹在#if DEGUG块中了..我认为应该停止任何whoopsie时刻! :P – 2011-11-24 09:46:34

+0

仅供参考,但SetInitializer中的类型说明符是多余的,可以省略。 – heisenberg 2012-01-10 14:05:36

回答

1

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

18

DropCreateDatabaseIfModelChanges只能在开发时使用,而不能在生产计算机上使用。如果您推送到生产机器并对模式进行更改,则会丢失所有数据。

+1

如果模型更改,使用.Seed方法对数据执行任何“升级”不是一个好的地方吗?谢谢! – 2012-01-24 00:43:20

0

代码首先不能升级数据库,同时保持数据不变。