2017-08-21 26 views
0

我想使用EF6的代码优先技术,但是当我对表进行更改时,它会删除数据库并重新创建它,清除所有数据。 有什么办法可以阻止这种情况发生?在EF6中更新CodeFirst中的数据库而不删除数据

我的代码:

Database.SetInitializer<EmployeeDb>(new DropCreateDatabaseIfModelChanges<EmployeeDb>()); 
+0

你也给出了答案。你的代码说,如果你改变你的模型,它会下降并创建数据库。 –

+0

我想知道是否有替代方案,我可以先使用代码,但在更新表上不必重新创建数据库。 –

+1

你可以使用Code First Migrations https://msdn.microsoft.com/en-us/library/jj591621(v=vs.113).aspx –

回答

0

这些都是在代码中第一种方法为数据库动初始化策略:

  1. CreateDatabaseIfNotExists:这是默认初始值。顾名思义,如果每个配置都不存在,它将创建数据库。但是,如果更改模型类,然后使用此初始化器运行应用程序,则会引发异常。
  2. DropCreateDatabaseIfModelChanges:如果模型类(实体类)已更改,此初始化程序将删除现有数据库并创建新数据库。所以当模型类更改时,您不必担心维护数据库模式。
  3. DropCreateDatabaseAlways:顾名思义,这个初始化程序每次运行应用程序时都会删除一个现有的数据库,而不管你的模型类是否已经改变。当你想要新的数据库时,每次运行应用程序时,这都会很有用,就像开发应用程序时一样。
  4. 自定义数据库初始化程序:如果上述任何一个不满足您的要求,或者您想要使用上述初始化程序初始化数据库,您也可以创建自己的自定义初始化程序。

Here,它可以给你一般的想法和如何使用这些方法之一。

由于您的意见CreateDatabaseIfNotExists可以帮助你。使用这种方法添加或删除模型类时,您的db将会更新,您的数据将保持稳定。

Here你可以找到例子都Context构造和计算器config文件

Another topic about this

相关问题